[英]SOLR mm and phrase queries not working after upgrading from SOLR 4 to SOLR 6
我正在测试新的SOLR 6服务器(6.2.0),因为我们已经运行了4.3.1一段时间了,现在是升级的时候了。
我注意到的一件事是mm(minMatch)术语似乎不像以前那样工作(或它被忽略),并且短语搜索也不能正常工作。
例如,在我们的索引中搜索“桌面扫描电子显微镜”(包括引号)应返回两个匹配的文档,但我得到零匹配。
搜索设置为使用edismax。
这是一些调试输出,以防这有用:
"responseHeader": {
"status": 0,
"QTime": 1,
"params": {
"mm": "4<-1 6<80%",
"q": "\"tabletop scanning electron microscope\"",
"qt": "dismaxsearch",
"indent": "on",
"pf": "headline^3.0 adtextintro^2.0 adtext^1.5",
"q.op": "OR",
"wt": "json",
"debugQuery": "true"
}
},
"response": {
"numFound": 0,
"start": 0,
"docs": []
},
"debug": {
"rawquerystring": "\"tabletop scanning electron microscope\"",
"querystring": "\"tabletop scanning electron microscope\"",
"parsedquery": "PhraseQuery(adtext:\"tabletop scan electron microscop\")",
"parsedquery_toString": "adtext:\"tabletop scan electron microscop\"",
"explain": {},
"QParser": "LuceneQParser",
使用q.op = OR时,相同的搜索(但没有引号)会返回太多结果,或者在使用q.op = AND时返回零结果。 同样,使用OR时似乎忽略了mm。 使用AND时,应该有两个匹配项。
有什么建议么? 从我到目前为止所读到的内容来看,q.op的工作方式似乎有所改变,但无论我如何调整它,我都无法让事情发挥作用。
如果需要更多详细信息,请与我们联系。
经过更多测试后,我发现我的配置中定义的“qf”被忽略了。 或者,可能忽略整个搜索器配置。
这是我的solrconfig.xml文件中的配置:
<requestHandler name="dismaxsearch" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="defType">edismax</str>
<float name="tie">0.01</float>
<str name="qf">
headline^3.0 manufacturer^1.0 model^1.0 adtextintro^2.0 adtext^1.5 companyname^0.2 clientnumber^20
</str>
<str name="bq">islvad:0^1.8</str>
<!-- <str name="bf">recip(lvqualityrank,1,1000000,500)</str>-->
<str name="bf">recip(lvqualityrankadjusted,1,5000000,50)</str>
<!-- <str name="bf">product(lvqualityrank,-1)</str>-->
<str name="q.alt">*:*</str>
<str name="fl">*,score</str>
<str name="rows">200</str>
<str name="boost">recip(ms(NOW/HOUR,addate),3.16e-11,0.08,0.03)</str>
</lst>
</requestHandler>
这一切都在SOLR4中有效,但在将配置迁移到SOLR6时我可能做错了...
谢谢,
法案
您的请求调度程序肯定有param handleSelect=true
(默认并建议用于向后兼容),在这种情况下,您需要确保没有定义名为“/ select”的请求处理程序(solrconfig.xml),否则/select
将实际处理请求无论qt
param如何。
handleSelect是一个遗留选项,它会影响请求的行为,例如/ select?qt = XXX
handleSelect =“true”将导致SolrDispatchFilter处理请求并将查询分派给“qt”参数指定的处理程序, 假设“/ select”尚未注册 。
但是如果handleSelect
设置为false
,则调用的请求处理程序由请求路径(而不是qt)
。 在这种情况下,像http://.../select?q=...
这样的请求被分派到/select
处理程序。
所以有两个选择:
handleSelect="true"
:只注释/select
处理程序定义并使用qt
param指定要使用的请求处理程序。 handleSelect="false"
:在请求路径中指定请求处理程序( .../dismaxsearch?q=...
)。 但这需要将您的请求处理程序重命名为"/dismaxsearch"
。 第一个选项通常是首选的,对于那些希望能够“动态”更改请求处理程序的人来说,它可能是最合适的,使用param比改变路径更直观,更合乎逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.