SOLR 6.6 eDisMax查询不遵守mm参数

时间:2018-01-12 21:36:17

标签: search solr lucene information-retrieval edismax

我正在使用Solr 6.6.2,直到现在我们使用DisMax查询和mm参数,它的工作方式与预期一致。一个小例子

defType=dismax&q=samsung+iphone&qf=name+brand&mm=1将按预期返回结果集,其中包含iPhone和Samsung产品。 然而完全同样的事情时,只需将defType替换为defType=edismax(保持mm=1),就不会返回任何结果。我已经在own error function上阅读了eDisMax查询解析器的文档,它清楚地说eDisMax是扩展所以我希望mm在DisMax和DisMax中的行为相同eDisMax,如果您在同一页面上向下滚动,该文档还提供了mm参数的示例,该参数应该按照我的预期工作。 这是一个错误,还是我错过了一些非常明显的东西?在这里爱一些帮助

编辑添加随请求一起发送的solr参数

eDisMax

{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":0,
    "params":{
      "mm":"1",
      "q":"samsung iphone",
      "defType":"edismax",
      "indent":"on",
      "fl":"name, category_names, score",
      "fq":"channel:outbound",
      "wt":"json",
      "_":"1515855895772"}},
  "response":{"numFound":0,"start":0,"maxScore":0,"docs":[]
  }}

DisMax

{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":22,
    "params":{
      "mm":"1",
      "q":"samsung iphone",
      "defType":"dismax",
      "indent":"on",
      "fl":"name, category_names, score",
      "fq":"channel:outbound",
      "wt":"json",
      "_":"1515855895772"}},
  "response":{"numFound":2147,"start":0,"maxScore":12.172616,"docs":[
      {
        "name":"Apple iPhone 5s",
        "score":12.172616},...]
}}

1 个答案:

答案 0 :(得分:0)

不确定是否有其他人遇到过这个问题,但我觉得它没有得到很好的记录。 我们的Solr q.op默认为AND,因此搜索"foo bar car"这样的搜索字词为foo AND bar AND cat。现在,对于mm=2defType=dismax,查询被错误地解析为(foo AND bar AND cat)~2到目前为止一直很好..

当我更改defType=edismax时,同一个查询"foo bar cat"mm=2被解析为(foo AND bar AND cat) 注意:缺少的~2

现在如果我继续添加q.op=OR有趣的事情就会开始发生。解析后的查询现在看起来像(foo bar cat)~2这正是dismax的作用。所以你可以理解(foo bar cat)~2找到我至少2个这些术语。如果我删除mm参数,则解析后的查询看起来像(foo bar cat),并且自q.op=OR后它返回包含3个术语中的任何一个的任何文档。

无论哪种方式,它都无关紧要,并且可以实现相同的行为,它只是令人困惑的是disMaxeDisMax之间的行为有些不一致。

希望这有助于其他人。