我一直在努力用AND和OR运算符形成一个solr字段查询。为什么solr为1和2,3和4查询返回不同的结果,即使所有查询都具有相同的逻辑 -
任何人都可以帮我理解solr如何在内部执行上述查询?
答案 0 :(得分:5)
这种不一致是一个已知问题,并且有一张开放票证:https://issues.apache.org/jira/browse/SOLR-3744
此主题涵盖更简单: Weird Solr/Lucene behaviors with boolean operators
你有一些"纯粹的消极"表达式中的嵌套查询
Lucene查询解析器期望"否定查询"与正选择查询一起表达。换句话说,除了city之外的任何东西:foo 被正确地写为*:* AND -city:foo
。
尝试进行以下更改:
1. <Same>
2. fq=(name:abc AND (*:* AND -city:(1 3)) OR (*:* AND -loc:(3 K D 5 7)))
3. <Same>
4. fq=name:abc&fq=((*:* AND -city:(1 3)) OR (*:* AND -loc:(3 K D 5 7)))
看看事情是否正确回归。
答案 1 :(得分:1)
当我同时使用*:* AND -city:foo
和q
时,即使fq
对我来说似乎也不能正常工作 - 例如,如下所示#4的变体不起作用:
4b. q=name:abc AND ((*:* AND -city:(1 3)) OR (*:* AND -loc:(3 K D 5 7)))
对我而言,当id:*
是必填字段时,使用*:*
代替id
。现在任何变种都有效。
4c. q=name:abc AND ((id:* AND -city:(1 3)) OR (id:* AND -loc:(3 K D 5 7)))
4d. q=name:abc&fq=((id:* AND -city:(1 3)) OR (id:* AND -loc:(3 K D 5 7)))