之前我问了一个相关的问题,正如海报所建议的那样,这个新问题已经成为一个后续行动:
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("准时")"在一个文本查询?
答案 0 :(得分:0)
我梳理了text search上的文档,我担心我不会认为这是可能的,因为MongoDB 2.6。 MongoDB的文本搜索支持并不像真正的全文搜索引擎那样完整(例如Solr /使用Lucene文本搜索库构建的东西)。目前,文本查询中不支持布尔运算符,因此您无法更改"延迟延迟\"按时\#34;"来自"(延迟或延迟)AND(\"准时")"到"迟到或延迟OR \"准时""。可能有一些解决方法涉及存储一组令牌而不是文本,或者除了文本之外还要存储令牌数组,或者与ElasticSearch等全文搜索引擎同步,但是我之前要更多地了解查询的用例。推荐任何解决方案。