Parsing Lucene/Solr意外查询答案

Parsing Lucene/Solr意外查询答案,parsing,solr,lucene,Parsing,Solr,Lucene,我使用的是运行在Tomcat7.0.29上的Solr4.4.0。 solrconfig.xlm已交付(当然Solr主目录除外)。 我可以传递schema.xml,尽管我怀疑这会有多大帮助,如下所示 如果我在文本中选择包含“俄罗斯”的所有文档(这是默认字段),即如果我执行查询“俄罗斯”,我只会找到1个文档,这是正确的 如果我选择文本(“web”)中包含“web”的所有文档,结果是29,这也是正确的 如果我搜索所有不包含“俄罗斯”(“not(russia)”)的文档,结果仍然正确(202) 如果我搜

我使用的是运行在Tomcat7.0.29上的Solr4.4.0。 solrconfig.xlm已交付(当然Solr主目录除外)。 我可以传递schema.xml,尽管我怀疑这会有多大帮助,如下所示

如果我在文本中选择包含“俄罗斯”的所有文档(这是默认字段),即如果我执行查询“俄罗斯”,我只会找到1个文档,这是正确的

如果我选择文本(“web”)中包含“web”的所有文档,结果是29,这也是正确的

如果我搜索所有不包含“俄罗斯”(“not(russia)”)的文档,结果仍然正确(202)

如果我搜索所有包含“web”而不包含“russia”(“web而非(russia)”)的文档,结果再次是正确的(28,因为包含“russia”的文档也包含“web”)

但是,如果我搜索所有包含“web”或不包含“russia”(“web或not(russia)”)的文档,结果仍然是28个,尽管我应该得到203个匹配项(整个集合)

有人有解释吗

有关信息,如果我没有在查询中的某个位置使用NOT,则AND和OR将正常工作,即: “网络与俄罗斯”-->好的
“网络或俄罗斯”-->好的

我从Yonik Seeley那里得到了一个解决方案,就是将NOT(俄罗斯)翻译成(*:*-russia),这样就可以使用正值(:即所有文档)从(-russia)中减去。这个解决方案非常有效。我仍然认为,修改解析器是一个好主意,这样StringghtForward请求“web或NOT(russia)”就可以在没有翻译的情况下工作。

在qn的编辑部分添加文本作为答案,并接受自己的答案。如果你关心你的代表的话,它会使qn得到回答(答案的向上投票给你10,而qn的向上投票只给你5:)。这种查询有一些令人困惑的情况,原因是布尔运算符不是真正的布尔运算符,而是被翻译成
MUST
/
SHOULD
/
MUST\u NOT
子句,这就是Lucene查询的真正工作方式。我建议尽可能使用+/-前缀运算符进行lucene查询,以避免混淆,并更有效地使用lucene功能。请看这篇很棒的文章:了解更多关于这个主题的完整信息。好的,谢谢arun,我刚刚这么做了。