MongoDB - 使用全文搜索来搜索单词和短语时的逻辑或

MongoDB - Logical OR when searching for words and phrases using full text search

我之前问过一个相关的问题,并且根据发帖者的建议创建了这个新问题作为跟进:

MongoDB full text search - matching words and exact phrases

我在使用 MongoDB 中的全文搜索功能时遇到了一些问题,出现了意外结果,特别是在搜索单词和短语的混合时。

使用发帖者在上一个问题中提供的这个有用示例...

> db.test.drop()
> db.test.insert({ "t" : "I'm on time, not late or delayed" })
> db.test.insert({ "t" : "I'm either late or delayed" })
> db.test.insert({ "t" : "Time flies like a banana" })
> db.test.ensureIndex({ "t" : "text" })

> db.test.find({ "$text" : { "$search" : "time late delay" } }, { "_id" : 0 })
{ "t" : "I'm on time, not late or delayed" }
{ "t" : "Time flies like a banana" }
{ "t" : "I'm either late or delayed" }

> db.test.find({ "$text" : { "$search" : "late delay" } }, { "_id" : 0 })
{ "t" : "I'm on time, not late or delayed" }
{ "t" : "I'm either late or delayed" }

> db.test.find({ "$text" : { "$search" : "late delay \"on time\"" } }, { "_id" : 0 })
{ "t" : "I'm on time, not late or delayed" }

前两个查询的行为与我预期的一样,第一个搜索 "time OR late OR delay",第二个搜索 "late OR delay"。

我现在通过阅读文档的这一部分了解到 http://docs.mongodb.org/manual/reference/operator/query/text/#phrases 第三个查询,其中包含一个短语,将搜索 "late OR delay AND ("on time")".

我的问题是,是否可以在一个文本查询中搜索 "late OR delay OR ("on time")"?

我梳理了 text search 上的文档,恐怕我认为从 MongoDB 2.6 开始这不可能。 MongoDB 的文本搜索支持根本不如真正的全文搜索引擎(例如 Solr/things 使用 Lucene 文本搜索库构建)那么完整。目前,文本查询中不支持布尔运算符,因此您无法将 "late delay \"on time\"" 的含义从 "(late OR delay) AND (\"on time\")" 更改为 "late或延迟或 \"on time\"”。可能有一些解决方法涉及存储令牌数组而不是文本或除了文本之外,或者与 ElasticSearch 等全文搜索引擎同步,但我宁愿在推荐任何之前更多地了解查询的用例解决方案。