MongoDB:弹性搜索的索引策略(排序和强度)

MongoDB:弹性搜索的索引策略(排序和强度),mongodb,mongoose,mongodb-query,mongoosastic,Mongodb,Mongoose,Mongodb Query,Mongoosastic,我正在使用MongoDB,有一个相当小的文档集合,如下所示: name:“始终使用en_GB语言环境,默认名称”, ticker:“名称”字段中的衍生短名称。比如说,如果我的全名是Aleksandr,那么股票代码将是Sasha的 name_locale:'此字段在不同的语言环境中有一个字符串,有时是西里尔语,有时是西班牙语', 语言环境:“en_GB'、//或“en_US”,它显示名称的语言环境字段 区域“欧洲”//或北美,在这种情况下并不重要 所有这些字段仅为String类型 另外,我有一个

我正在使用MongoDB,有一个相当小的文档集合,如下所示:

name:“始终使用en_GB语言环境,默认名称”,
ticker:“名称”字段中的衍生短名称。比如说,如果我的全名是Aleksandr,那么股票代码将是Sasha的
name_locale:'此字段在不同的语言环境中有一个字符串,有时是西里尔语,有时是西班牙语',
语言环境:“en_GB'、//或“en_US”,它显示名称的语言环境字段
区域“欧洲”//或北美,在这种情况下并不重要
所有这些字段仅为
String
类型

另外,我有一个API端点,我想接收一个参数,可以是这些字段的任何值。因此它可以是
param=Europe
param=en_GB
param=name\u locale\u value

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

schema.index(
  { name: 'text', name_locale: 'text', ticker: 'text', region: 'text' },
  { name: 'SearchQuery' },
);
但正如您可能注意到的,我没有任何排序规则和强度值。因此,问题是:

如何使用
strength:1
进行不区分大小写的搜索,如果我还需要包含/search by
name\u locale
字段,该字段具有不同语言的字符串值

文档示例:

{
  name: 'Aleksandr,
  ticker 'Sasha',
  name_locale: 'Саша',
  locale: 'ru_RU',
  region: 'Europe',
},{
  name: 'Jonathan',
  ticker 'John',
  name_locale: 'Jonathan',
  locale: 'en_US',
  region: 'North America',
}
  • 我是否需要构建许多单字段索引?并使用
    $或
    运算符查找所有字段
  • 或者Mongo4.4中的
    text
    索引是否支持
    strength
    而不支持
    locale
  • 也许还有另一种通用方法,比如使用
    。使用Regexp查找
    ?如果你能分享一些建议,我将不胜感激
不区分大小写的意思是特定于语言环境的。这意味着在查询时,您需要知道查询使用的语言,以便能够通过该查询以不区分大小写的方式进行搜索

考虑到这一点,我将创建另一个字段,其中包含来自特定于区域设置的字段的小写文本,由应用程序根据每个字段值所使用的语言进行小写,然后使用“简单”区域设置对小写查询执行二进制比较(在您的应用程序中,也可以使用小写字母,并了解查询所用的语言)这将适用于任何语言。这样,您应该能够只使用一个文本索引

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

await collection.find(
          { $text: { $search: QueryValue } }, //QueryValue = 'europe'
          { score: { $meta: 'textScore' } },
        )