我正在测试新的SOLR 6服务器(6.2.0),因为我们已经运行了4.3.1一段时间了,现在是升级的时候了。
我注意到的一件事是mm(minMatch)术语似乎不像以前那样工作(或者它被忽略),并且短语搜索也不能正常工作。 / p>
例如,搜索桌面扫描电子显微镜"我们索引中的(包括引号)应返回两个匹配的文档,但我得到零匹配。
搜索设置为使用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的工作方式似乎有所改变,但无论我如何调整它,我都无法让事情发挥作用。
如果需要更多详细信息,请与我们联系。
经过更多测试后,我发现&#34; qf&#34;在我的配置中定义的被忽略。或者,可能忽略整个搜索器配置。
这是我的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时我可能做错了...
谢谢,
比尔
答案 0 :(得分:0)
您的请求调度程序肯定有param handleSelect=true
(默认并建议用于向后兼容),在这种情况下,您需要确保没有定义名为“/ select”的请求处理程序(solrconfig.xml),否则{{无论/select
param是什么,都会实际处理请求。
handleSelect 是影响请求行为的旧版选项,例如/ select?qt = XXX
handleSelect =“true”将导致SolrDispatchFilter处理请求并将查询分派给“qt”参数指定的处理程序,假设“/ select”尚未注册。 / p>
但如果qt
设置为handleSelect
,则调用的请求处理程序由请求路径确定(不是false
。在这种情况下,请求类似qt)
被分派到http://.../select?q=...
处理程序。
所以有两个选择:
/select
:只注释掉handleSelect="true"
处理程序定义,并使用/select
参数指定要使用的请求处理程序。 qt
:在请求路径(handleSelect="false"
)中指定请求处理程序。但这需要将您的请求处理程序重命名为.../dismaxsearch?q=...
。第一个选项通常是首选的,对于那些希望能够“动态”更改请求处理程序的人来说,它可能是最合适的,使用param比改变路径更直观,更合乎逻辑。