我使用的是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=Europe
或param=en_GB
或param=name_locale_value
。
那么,在那种情况下,我需要一个文本索引,对吗?我有。
schema.index(
{ name: 'text', name_locale: 'text', ticker: 'text', region: 'text' },
{ name: 'SearchQuery' },
);
但是您可能会注意到,我没有任何归类和强度值。所以问题是:
如果我还需要通过
strength: 1
字段进行包含/搜索,该字段具有不同语言的字符串值,那么如何使用name_locale
,like in this answer进行不区分大小写的搜索?>
文档示例:
{
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' } },
)
$or
运算符来查找所有字段。text
索引是否支持strength
而没有locale
?.find
与Regexp一起使用?如果您分享一些建议,我将不胜感激。答案 0 :(得分:1)
“不区分大小写”的含义是特定于语言环境的。这意味着在查询时,您需要知道查询所用的语言,以便该查询能够以不区分大小写的方式进行搜索。
鉴于此,我将创建另一个字段,其中包含特定于语言环境的字段中的小写文本,由应用程序将其小写,并了解每个字段值所用的语言,然后使用“简单”语言环境对它进行二进制比较小写查询(在知道查询所用语言的情况下在应用程序中也小写)将适用于任何语言。这样,您应该只能使用一个文本索引。
此解决方案无法解决问题,如果您想进行研究,我想您需要为每种可能用于查询的语言定义一个索引。