使用AND和OR运算符进行Solr字段查询(fq)

Rah*_*rma 2 solr

我一直在努力用AND和OR运算符形成一个solr字段查询.为什么solr为1和2,3和4查询返回不同的结果,即使所有查询都具有相同的逻辑 -

  1. fq =(名称:abc AND -city:(1 3))OR(名称:abc AND -loc:(3 KD 5 7))
  2. fq =(名称:abc AND(-city:(1 3)OR -loc:(3 KD 5 7)))
  3. fq = name:abc&fq = - (city:(1 3)AND loc:(3 KD 5 7))
  4. fq = name:abc&fq =( - city:(1 3)OR -loc:(3 KD 5 7))

有谁可以帮我理解solr内部如何执行上述查询?

Pet*_*ses 5

这种不一致是一个已知的问题,并且有一张开放的票:https: //issues.apache.org/jira/browse/SOLR-3744

这个线程涵盖了更简单的术语: 使用布尔运算符的奇怪的Solr/Lucene行为

您的表达式中有一些"纯负面"嵌套查询,Lucene查询解析器希望"否定查询"与正选择查询一起表达.换句话说,除了城市之外的任何东西: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)))
Run Code Online (Sandbox Code Playgroud)

并查看是否有正确的事情.