我在使用edismax解析器(q.op = OR)将Solr 3.6.1上的默认运算符设置为OR时遇到问题
我在solr版本4.10.4和3.6.1中有相同的集合
我在4.10.4中搜索:pascal fubar,其中fubar这个词在任何文档中都不会出现。查看调试信息,我看到:
"parsedquery_toString": "+((name:maxtor) (name:fubar))",
这匹配了许多文档(其中包含pascal的文档)。
我在3.6.1 solr上执行相同的搜索,并查看:
http://localhost:8983/solr/select?q=maxtor+fubar&wt=json&indent=true&debugQuery=true&defType=edismax&stopwords=true&lowercaseOperators=true&q.op=OR
+(((name:maxtor) (name:fubar))~2)
基本上说fubar和pascal必须在2个位置内发生。所以这匹配零文档。
查询:pascal或fubar有效。
有没有人知道为什么~2被添加到查询中?请注意,我采用了标准的4.10.4 solr配置,并将我的3.6.1配置中的搜索处理程序合并,因此它们不是100%完全相同。
答案 0 :(得分:0)
要回答我自己的问题,因为有人可能会遇到同样的问题,这似乎是3.6+和早期4. * dismax和edismax解析器的一个功能(bug)。这个答案给出了一些解释
Changing the default operator from OR to AND in Solr (Magento Enterprise)
似乎与此问题有关
https://issues.apache.org/jira/browse/SOLR-2649
无论如何,我试过的4.10.4版本solr并没有以同样的方式运行。
解决方案是给我们一个必须匹配的参数1为OR行为
&mm=1
希望这对某人有所帮助,因为我花了很长时间进行调试。