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

时间:2015-02-10 09:35:30

标签: mongodb search full-text-search mongodb-query full-text-indexing

之前我问了一个相关的问题,正如海报所建议的那样,这个新问题已经成为一个后续行动:

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" }

前两个查询的行为与我期望的一样,第一个查询"时间或延迟或延迟"而第二个是“晚期或延迟”#34;。

我现在通过阅读文档http://docs.mongodb.org/manual/reference/operator/query/text/#phrases的这一部分了解到,包含短语的第三个查询将搜索"延迟OR延迟AND("准时")& #34;

我的问题是,是否可以搜索"延迟或延迟OR("准时")"在一个文本查询?

1 个答案:

答案 0 :(得分:0)

我梳理了text search上的文档,我担心我不会认为这是可能的,因为MongoDB 2.6。 MongoDB的文本搜索支持并不像真正的全文搜索引擎那样完整(例如Solr /使用Lucene文本搜索库构建的东西)。目前,文本查询中不支持布尔运算符,因此您无法更改"延迟延迟\"按时\#34;"来自"(延迟或延迟)AND(\"准时")"到"迟到或延迟OR \"准时""。可能有一些解决方法涉及存储一组令牌而不是文本,或者除了文本之外还要存储令牌数组,或者与ElasticSearch等全文搜索引擎同步,但是我之前要更​​多地了解查询的用例。推荐任何解决方案。