Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb文本搜索精确短语_Mongodb_Mongodb Query_Full Text Search_Text Search - Fatal编程技术网

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团队对此的反馈。