弹性搜索匹配短语查询 -> 输出不可预测

Elastic Search match phrase query -> output not predictable

示例文档

{
  "id": 5,
  "title": "Quick Brown fox jumps over the lazy dog",
  "genre": [
    "fiction"
  ]
}

映射

{
  "movies" : {
    "mappings" : {
      "properties" : {
        "genre" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "id" : {
          "type" : "long"
        },
        "title" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

查询 1: 先前共享文档中的结果

{
 "query": {
   "match_phrase": {
     "title": {
       "query": "fox quick over", "slop": 3
     }
   }
 } 
}

查询 2: 无结果

{
 "query": {
   "match_phrase": {
     "title": {
       "query": "over fox quick", "slop": 3
     }
   }
 } 
}

我期待查询 2 而不是查询 1 中的结果。

因此,我使用您提供的映射重现了该问题,并且能够在 Explain API and this 关于 slop in match_phrase 查询的文章的帮助下解决该问题。

所以你的第二个查询给出了最小值 slop of 6 的结果,如我的搜索结果所示。

搜索查询

{
 "query": {
   "match_phrase": {
     "title": {
       "query": "over fox quick", "slop": 6 --> note 6
     }
   }
 } 
}

同样,您需要提供一个 minimum slop of 3 以从您的第一个查询中获取搜索结果。

基本上斜率值是指可配置项的允许偏差。

示例:- 您的文档包含 Quick Brown fox jumps over the lazy dog.

Quick
Brown
fox
jumps
over
the
lazy 
dog

如果您将 fox quick over 作为短语进行搜索,则它们都需要放在一起,为此您需要重新排列上述标记。

最少需要更换 3 个,如下所示:

foxover 无需更改任何内容,因为它们已经按顺序排列,并且 quick 需要进行 3 次更换,才能到达正确的位置。

使用相同的方法,您可以找出为什么在第二个查询中需要 6 个 slop 才能工作。

马虎

Number of times you need to move a term in order to make the query and document match.

Switching word order requires two edits/steps

下面是动词

查询 1:

            Pos 1         Pos 2         Pos 3     Pos 4     Pos 5   Pos 6  Pos 7   Pos 8
--------------------------------------------------------------------------------------
Doc:        quick         brown         fox       jumps     over    the   lazy    dog
---------------------------------------------------------------------------------------
Query:                                  fox       quick     over
Slop 1:                                 fox|quick           over                                       
Slop 2:                   quick         fox                 over
Slop 3:    quick                        fox                 over

总步数 3

查询 2:

            Pos 1         Pos 2         Pos 3     Pos 4   Pos 5   Pos 6  Pos 7   Pos 8
--------------------------------------------------------------------------------------
Doc:        quick         brown         fox       jumps    over    the   lazy    dog
---------------------------------------------------------------------------------------
Query:                    over          fox       quick
Slop 1:                   over          fox|quick            
Slop 2:                   quick|over    fox           
Slop 3:     quick         over          fox       
Slop 4:     quick                       over|fox      
Slop 5:     quick                       fox       over
Slop 6:     quick                       fox               over

总步数 6