从SOLR 4升级到SOLR 6后,SOLR mm和短语查询不起作用

从SOLR 4升级到SOLR 6后,SOLR mm和短语查询不起作用,solr,Solr,我正在测试一个新的Solr6服务器(6.2.0),因为我们已经运行了4.3.1一段时间,现在是升级的时候了 我注意到的一件事是,mm(minMatch)术语似乎不像过去那样工作(或者被忽略),短语搜索也不能正常工作 例如,在我们的索引中搜索“桌面扫描电子显微镜”(包括引号),应该会返回两个匹配的文档,但我得到的匹配结果为零 搜索设置为使用eDiscoveryMax 以下是一些调试输出,以防有帮助: "responseHeader": { "status": 0, "QTime": 1, "par

我正在测试一个新的Solr6服务器(6.2.0),因为我们已经运行了4.3.1一段时间,现在是升级的时候了

我注意到的一件事是,mm(minMatch)术语似乎不像过去那样工作(或者被忽略),短语搜索也不能正常工作

例如,在我们的索引中搜索“桌面扫描电子显微镜”(包括引号),应该会返回两个匹配的文档,但我得到的匹配结果为零

搜索设置为使用eDiscoveryMax

以下是一些调试输出,以防有帮助:

"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",
“负责人”:{
“状态”:0,
“QTime”:1,
“参数”:{

“mm”:“4您的请求分派器当然有param
handleSelect=true
(默认值,建议向后兼容),在这种情况下,您需要确保没有定义名为“/select”的请求处理程序(solrconfig.xml),否则
/select
将实际处理请求,而不考虑
qt
参数

handleSelect是一个影响请求行为的传统选项,例如/select?qt=XXX

handleSelect=“true”将导致SolrDispatchFilter处理请求并将查询分派给“qt”参数指定的处理程序,假设/select尚未注册

但是如果
handleSelect
设置为
false
,则调用的请求处理程序由请求路径(而不是
qt)
确定。在这种情况下,类似
http://.../select?q=...
被分派到
/select
处理程序

因此有两种选择:

  • 使用
    handleSelect=“true”
    :只需注释掉
    /选择处理程序定义并使用
    qt
    参数指定要使用的请求处理程序
  • 使用
    handleSelect=“false”
    :在请求路径中指定请求处理程序(
    ../dismxsearch?q=…
    )。但这需要将请求处理程序重命名为
    “/dismxsearch”

第一个选项通常是首选选项,对于那些希望能够“动态”更改请求处理程序的人来说可能是最合适的,使用参数比更改路径更直观、更符合逻辑。

您的请求调度程序当然具有param
handleSelect=true
(默认值,建议向后兼容),在这种情况下,您需要确保没有定义名为“/select”的请求处理程序(solrconfig.xml),否则
/select
将实际处理请求,而不管
qt
参数如何

handleSelect是一个影响请求行为的传统选项,例如/select?qt=XXX

handleSelect=“true”将导致SolrDispatchFilter处理请求并将查询分派给“qt”参数指定的处理程序,假设/select尚未注册

但是如果
handleSelect
设置为
false
,则调用的请求处理程序由请求路径(而不是
qt)
确定。在这种情况下,类似
http://.../select?q=...
被分派到
/select
处理程序

因此有两种选择:

  • 使用
    handleSelect=“true”
    :只需注释掉
    /选择处理程序定义并使用
    qt
    参数指定要使用的请求处理程序
  • 使用
    handleSelect=“false”
    :在请求路径中指定请求处理程序(
    ../dismxsearch?q=…
    )。但这需要将请求处理程序重命名为
    “/dismxsearch”

第一个选项通常是首选的,对于那些希望能够“动态”更改请求处理程序的人来说可能是最合适的,使用参数比更改路径更直观、更合乎逻辑。

这里有一个更新。如果我专门搜索单个字段,例如“headline”“,然后它确实找到了匹配项。标题:“桌面扫描电子显微镜”但当我没有指定字段时,它找不到匹配项。短语字段(pf)参数包括标题字段,所以我不确定为什么在标题字段中专门搜索短语会有不同……你确定你有“dismaxsearch”吗?”在您的新安装中定义的查询处理程序?这不是Solr中的标准查询解析名称,并且您的调试表明它使用的是标准LuceneQParser。这可能不是您想要的。请尝试仅使用
dismax
edismax
来使用更现代版本的dismax解析器。谢谢@MatsLindh。我已经体验过了ting的东西,并发现它似乎忽略了至少一部分的配置。也许它根本不认识DemasSearch搜索程序。我不能在这里发布配置,因为没有足够的空间。我会看看我是否可以编辑上面的问题,包括它…好的,我想我已经明白了发生了什么(感谢@MatsLindh为我指出了正确的方向)。配置没有被忽略……我只是说它错了。在我们的SOLR4安装中,使用定义的qt=DemasSearch调用/选择会正常工作——“DemasSearch”正在使用requestHandler。在SOLR6上,如果我调用/select,则会忽略qt=DismXsearch。我必须调用/DismXsearch而不是/select。我还必须将requestHandler名称更改为“/DismXsearch”,而不仅仅是“DismXsearch”。如果有更好的方法,我很想知道。@user3302110稍晚一点,但就是这样。。我对我的答案做了一些澄清,我想您可能更喜欢第一个选项,但这取决于您的需要。我记得几年前在升级过程中遇到过同样的问题:)!希望它能帮上忙Shere这是一个更新如果我专门搜索一个字段,比如“headline”,那么它会找到匹配项headline:“桌面扫描电子显微镜”
    <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>