所以我在一个集合中有一个文档,其中的一个字段的值为“ @@@” 我索引了集合并尝试运行查询:
db.getCollection('TestCollection').find({$text:{$search:"\"@@@\""}})
但是它没有显示结果
我该如何解决?
示例文档:
{
"_id" : ObjectId("5b90dc6d3de8562a6ef7c409"),
"field" : "value",
"field2" : "@@@"
}
答案 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" } )
您使用的值很小。尝试使用更长的值。