当从1.7移动到5.4时,Elasticsearch查询结果会有所不同

时间:2017-08-03 20:26:14

标签: elasticsearch elasticsearch-5 elasticsearch-2.0

我正在将Elasticsearch实例从1.7升级到5.4.3,并注意到两个系统之间的搜索结果不同,即使使用相同的查询也是如此。

Elasticsearch 1.7查询

{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "something",
            "fields": [
              "field1",
              "field2",
              "field3"
            ],
            "operator": "and"
          }
        }
      ]
    }
  }
}

Elasticsearch 5.4查询

_explain

Elasticsearch 1.7中的第一个搜索结果成为Elasticsearch 5.4的第71个结果。当我使用{ "_index": "...", "_type": "...", "_id": "...", "matched": true, "explanation": { "value": 9.963562, "description": "max of:", "details": [ { "value": 3.1413355, "description": "sum of:", "details": [ { "value": 1.0609967, "description": "weight(field1:something in 13) [PerFieldSimilarity], result of:", "details": [ ...remainder removed for brevity 端点查看1.7和5.4之间的相同搜索结果时,我发现评分的完成方式不同。此外,此查询还包括搜索查询匹配的同义词。

解释Elasticsearch 1.7

{
    "_index": "...",
    "_type": "...",
    "_id": "...",
    "matched": true,
    "explanation": {
        "value": 7.1987557,
        "description": "sum of:",
        "details": [
            {
                "value": 7.1987557,
                "description": "max of:",
                "details": [
                    {
                        "value": 6.659632,
                        "description": "weight(Synonym(field1:something field1:something2 field1:something3) in 113) [PerFieldSimilarity], result of:",
                        "details": [
...remainder removed for brevity

解释Elasticsearch 5.4

_explain

问题

  1. 我的搜索结果对于两个版本中的等效查询有何不同?
  2. Elasticsearch 1.7的max of查询是否显示sum of高于const hasEmpty = myVariables.some(v => typeof v === 'undefined'); 的计算结果,而Elasticsearch 5.4的相反表明问题的一部分?

1 个答案:

答案 0 :(得分:0)

默认"相似度"在Elasticsearch 5.0中已更改,从TF / IDF更改为BM25

从技术上讲,移动到Lucene 6.2(默认为Elasticsearch 5.0.0)时,这实际上是一个变化。

Elasticsearch 5.0.0 Release Notes包括以下一行:

  

将默认相似度更改为BM25 #18948(问题:#18944

您可以阅读有关Elasticsearch similarity here的更多信息。这是两个字段相互比较的方式(特别是那些带有" text"映射的字段)。在5.0.0之前的版本中,默认相似度为TF / IDF(术语频率,逆文档频率),后来更改为BM25(最佳匹配25)。此更改将导致一组不同的结果,这些结果旨在成为更好的搜索结果集。

如果您想使用以前的行为,您可以更改映射文件中的similarity以使用classic(指TF / IDF)。例如,您的YAML映射文件可以包含:

description:
  type: text
  similarity: classic

有用链接以及更多信息: