繁体   English   中英

从SOLR 4升级到SOLR 6后,SOLR mm和短语查询无效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM