Mongo DB通过索引字段进行搜索

3
我在我的文档中添加了一个名为“search_string”的字段,并对其进行索引。 db.my_collection.createIndex({search_string: "text"}) Search_string 包含这些内容:'a ar are aren arena'。
我可以用以下代码找到对应的记录: db.my_collection.find({$text: {$search: 'ar'}}), db.my_collection.find({$text: {$search: 'аren'}}), db.my_collection.find({$text: {$search: 'arenа'}}), 但db.my_collection.find({$text: {$search: 'а'}})db.my_collection.find({$text: {$search: 'аre'}})没有返回任何结果。这是为什么呢?
2个回答

4

来自MongoDB手册

匹配操作

停用词

$text运算符会忽略特定于语言的停用词,例如英语中的“the”和“and”。

“a”和“are”都在默认的英语停用词列表中,因此将被忽略。搜索英语停用词的快速谷歌搜索将找到很多包含完整列表的页面。


如何忽略这些单词? - Yurii Kramarenko
再次查看手册"搜索不同的语言在$text表达式中使用可选的$language字段来指定语言,以确定停用词列表和搜索字符串的词干器和分词器规则。如果您将语言值指定为“none”,则文本搜索将使用简单的分词,没有停用词列表和没有词干处理。"所以我猜将$language指定为none可能会起作用。 - ElPedro
$language: "none" - 没有帮助 - Yurii Kramarenko

1
默认情况下,MongoDB使用英语进行文本索引,并且停用词不会被索引。
如果您指定语言值为“none”,则文本搜索将使用简单的分词,没有停用词列表和没有词干处理。
因此,您应该像这样创建您的索引:
db.my_collection.createIndex( { search_string : "text" }, { default_language: "none" } )
MongoDB文档 在这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接