Elasticsearch 6.5 查询评分更改,我们如何获得 ES 5 类型的结果



我正在用Elasticsearch做一个推荐器。我知道人们买了什么,这形成了查询。该索引包含项目,并具有一个包含共同购买的项目的字段。

我们使用的是 ES 5,以下查询查找最高分数,即与查询最共同的项目。但是 ES 6 中的此查询仅返回 score = 1.0,因此不再找到最相似的项目。

{
  "query": {
    "bool": {
      "should": [
        {
          "terms": {
            "bought": [
              "iPad Pro",
              "iPhone 8"
            ]
          }
        }
      ]
    }
  }
}

我们如何通过 ES 6 查询获得相同的结果?

它在

Elasticsearch 6.0中被列为重大更改。基本上,terms查询现在始终返回等于1的分数

不幸的是,正如我已经说过的,拥有完全相同的行为是非常困难的,但是根据您的逻辑 - 我建议使用布尔查询,例如

{
  "query": {
    "bool" : {
      "should" : [
        { "term" : { "bought" : "Ipad PRO" } },
        { "term" : { "bought" : "Iphone XS" } }
      ]
    }
  }
}

在这种情况下,您将能够模仿相同的术语查询行为,但还可以保持与您想要的确切逻辑相关的分数。如果一个人只是买了 1 件东西中的 2 分会更少'

最新更新