SOLR 6.6 eDisMax 查询不考虑 mm 参数

SOLR 6.6 eDisMax query not respecting mm parameter

我使用的是 Solr 6.6.2,到目前为止,我们一直在使用 DisMax 查询和 mm 参数,它按预期工作。一个小例子

defType=dismax&q=samsung+iphone&qf=name+brand&mm=1 会 return 符合预期的结果集,包含 iPhone 和三星产品。 但是当做完全同样的事情时,只需将defType替换为defType=edismax(保持mm=1 ) 没有结果 returned。我已经在 Apache SOLR reference 阅读了 eDisMax 查询解析器的文档,它清楚地表明 eDisMax 是一个 扩展 所以我希望 mm 在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},...]
}}

不确定其他人是否遇到过这个问题,但我觉得没有很好的记录。 我们的 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 它 returns 任何包含 3 个术语中的任何一个的文档。

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

希望这对其他人有帮助。