MongoDB:elasticsearch的索引策略(collat​​ion and strength)

MongoDB: Index strategy for elastic search (collation and strength)

我正在使用 MongoDB 并收集了很少的文档,这里是:

name: 'Always en_GB locale, default name',
ticker: 'Derivative short name from the name field. Like if my full name is Aleksandr, then ticker will be Sasha'
name_locale: 'This field has a string in different locales, sometimes it\'s Cyrillic, sometimes it\'s Spanish',
locale: 'en_GB', //or 'en_US', it shows the locale of name_locale field
region 'Europe', //or North America, it doesn't matter in that case

所有这些字段都是 String 类型。

此外,我有一个 API 端点,我想接收一个参数,该参数可以是这些字段的任何值。所以它可能是 param=Europeparam=en_GBparam=name_locale_value.

所以,在那种情况下,我需要一个文本索引,对吗?我有。

schema.index(
  { name: 'text', name_locale: 'text', ticker: 'text', region: 'text' },
  { name: 'SearchQuery' },
);

但是您可能会注意到,我没有任何排序规则和强度值。所以问题是:

How to make case-insensitive searches, with strength: 1, like in this answer, if I also need to include/search by name_locale field, that has string values in different languages?

文档示例:

{
  name: 'Aleksandr,
  ticker 'Sasha',
  name_locale: 'Саша',
  locale: 'ru_RU',
  region: 'Europe',
},{
  name: 'Jonathan',
  ticker 'John',
  name_locale: 'Jonathan',
  locale: 'en_US',
  region: 'North America',
}
await collection.find(
          { $text: { $search: QueryValue } }, //QueryValue = 'europe'
          { score: { $meta: 'textScore' } },
        )

“case-insensitive”的意思是locale-specific。这意味着当您查询时,您需要知道查询使用的是什么语言,以便能够以 case-insensitive 方式通过该查询进行搜索。

鉴于此,我将创建另一个字段,其中包含来自您的 locale-specific 字段的小写文本,由您的应用程序根据每个字段值使用的语言进行小写,然后使用“简单”语言环境执行与适用于任何语言的小写查询(在您的应用程序中也小写,知道查询使用的语言)的二进制比较。这样你应该可以只使用一个文本索引。

此解决方案不提供词干提取,如果您想要词干提取,我想您需要为可能用于查询的每种语言定义一个索引。