Mongodb文本搜索精确短语
我收集了以下文档:Mongodb文本搜索精确短语,mongodb,mongodb-query,full-text-search,text-search,Mongodb,Mongodb Query,Full Text Search,Text Search,我收集了以下文档: { "_id" : ObjectId("5ad609a2ac1a8b644180936a"), "content" : "Coffee and cakes..." }, { "_id" : ObjectId("5ad609baac1a8b644180936b"), "content" : "coffee shop..." } 文本搜索查询的结果: find({ $text: { $search: "\"coffee shop\" cakes"
{
"_id" : ObjectId("5ad609a2ac1a8b644180936a"),
"content" : "Coffee and cakes..."
},
{
"_id" : ObjectId("5ad609baac1a8b644180936b"),
"content" : "coffee shop..."
}
文本搜索查询的结果:
find({ $text: { $search: "\"coffee shop\" cakes" } })
只返回第二个文档,但我希望两个文档都返回。有什么问题 尝试使用正则表达式
db.collectionName.find({content:{$regex:/^coffee/i}})
/我将为忽视这件事而道歉
帮助链接:此
find({ $text: { $search: "coffee shop cakes" } })
。。。将搜索具有content
属性且包含“coffee”或“shop”或“cake”之一的任何文档
但是这个
find({ $text: { $search: "\"coffee shop\" cakes" } })
。。。将搜索任何具有内容属性且包含短语“coffee shop”的文档
我认为,当您提交短语(“咖啡店”)和额外的搜索值(“蛋糕”)时,您正在期待上述两种行为。然而,这不是MongoDB对待短语和附加术语组合的方式
发件人:
如果$search
字符串包含短语和单个术语,则文本搜索将仅匹配包含该短语的文档
根据查询“\”咖啡店\“蛋糕”
将评估为:
"coffee shop" AND ("cakes" or "coffee" or "shop")
这仅与第二个文档正确匹配
注:与此相反,根据这些文档,查询“\'coffee shop\'cakes”
将被评估为:“coffee shop”或“cakes”
,但您观察到的行为与上面引用的$text
操作员文档一致
感谢@RahulRaj for,他们的回复确认了文档不正确:
正如您正确注意到的,这两页之间的文档不一致。我们正在跟踪DOCS-10382中的文档
正确描述此功能的当前实现
我认为问题集中在文本索引和$text
操作符的使用上。$regex
操作符可用于应用类似的查询,但这无法回答OP关于文本搜索为什么不同时返回两个文档的问题。根据这些文件,它说它会退回所有包含“咖啡店”或“蛋糕”的文件。因此,它应该返回这两个文档。为什么它没有发生?我想这就是OP所关心的。希望您理解mongo文档中提到的要点。虽然与相矛盾,但实际行为(正如OP所观察到的)得到了我在回答中包含的$text
操作员文档的引用的支持。明白了,但在文本索引文档中提到了(除非OP没有文本索引,否则情况与此完全相同),而不是AND。我创建了文本索引,并进行了测试,得到了与OP相同的结果。文档中的say或in,say和in。实际行为(我在v3.4.7上观察到,OP在那里运行的任何版本上都观察到)is:和。这表明$text
操作员文档是正确的。OP的结果是否正确?如果和是所选的搜索表单,那么结果将为零,因为在一个地方既没有咖啡店
也没有蛋糕
的内容。这里的情况是OP得到的结果不是,同时也不是而且,我创建了一个jira请求,以听取mongo团队对此的反馈。