MongoDB中的全文本搜索未产生“ @@@”的预期结果

时间:2018-09-06 16:41:25

标签: mongodb mongodb-query

所以我在一个集合中有一个文档,其中的一个字段的值为“ @@@” 我索引了集合并尝试运行查询:

db.getCollection('TestCollection').find({$text:{$search:"\"@@@\""}})

但是它没有显示结果

我该如何解决?

示例文档:

{
"_id" : ObjectId("5b90dc6d3de8562a6ef7c409"),
"field" : "value",
"field2" : "@@@"
}

2 个答案:

答案 0 :(得分:2)

文本搜索旨在基于language heuristics为字符串编制索引。文本索引包括两个常规步骤:tokenizing(将字符串转换为感兴趣的各个术语),然后是stemming(将每个术语转换为根形式,以便基于语言进行索引)具体规则)。

在标记化步骤中,某些字符(例如,标点符号,例如@)被分类为单词分隔符(又名定界符),而不是文本输入,并且被用来分隔原始字符串而言。特定于语言的stop words(英语中诸如“ the”,“ is”或“ on”之类的常用词)也排除在文本索引之外。

由于您的搜索词组@@@完全由定界符组成,因此文本索引中没有相应的条目。

如果要匹配通用字符串模式,则应使用regular expressions而不是文本搜索。例如:db.getCollection('TestCollection').find({field2:/@@@/})。但是,请注意index usage上的正则表达式注意事项。

答案 1 :(得分:0)

您的查询中有很多花括号,请将其删除:

db.getCollection('so2').find({$text:{$search:"\"@@@\""}})

如果您运行它,Mongo会告诉您缺少文本索引。像这样添加它:

db.so2.createIndex( { field2: "text" } )

您使用的值很小。尝试使用更长的值。