【发布时间】:2020-12-11 22:41:42
【问题描述】:
我正在使用 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、like in this answer 进行不区分大小写的搜索,如果我还需要包含/搜索具有不同语言字符串值的name_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',
}
await collection.find(
{ $text: { $search: QueryValue } }, //QueryValue = 'europe'
{ score: { $meta: 'textScore' } },
)
- 是否需要构建多个单字段索引?并使用
$or运算符查找所有字段。 - 或者Mongo 4.4 中的
text索引是否支持strength而没有locale? - 也许还有另一种通用方式,例如将
.find与正则表达式一起使用?如果您能提供一些建议,我将不胜感激。
【问题讨论】:
标签: mongodb mongoose mongodb-query mongoosastic