弹性搜索匹配短语查询 -> 输出不可预测
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 个,如下所示:
fox
和 over
无需更改任何内容,因为它们已经按顺序排列,并且 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
示例文档
{
"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 个,如下所示:
fox
和 over
无需更改任何内容,因为它们已经按顺序排列,并且 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