slop
用過搜索引擎的都知道,輸入一個query,然後會出很多聯想的詞條,如下面:
一般來說完全精確短語匹配 或許是過於嚴格了。
也許我們想要包含 “quick brown fox” 的詞條也能夠匹配 “quick fox,” , 儘管情形不完全相同。
我們能夠通過使用 slop 參數將靈活度引入短語匹配中。
slop 參數告訴 match_phrase 查詢詞條相隔多遠時仍然能將文檔視爲匹配 。 相隔多遠的意思是爲了讓查詢和文檔匹配你需要移動詞條多少次?
我們以一個簡單的例子開始吧。 爲了讓查詢 quick fox 能匹配一個包含 quick brown fox 的文檔, 我們需要 slop 的值爲 1:
GET /my_index/my_type/_search
{
"query": {
"match_phrase": {
"title": {
"query": "quick fox",
"slop": 1
}
}
}
}
儘管在使用了 slop 短語匹配中所有的單詞都需要出現, 但是這些單詞也不必爲了匹配而按相同的序列排列。 有了足夠大的 slop 值, 單詞就能按照任意順序排列了。
爲了使查詢 fox quick
匹配我們的quick brown fox
詞條, 我們需要 slop 的值爲 3:
其實也就是,轉化順序一次,然後相隔兩次。slop = 1 + 2;
就是說 slop 在 相隔一個term詞算一次,或者在順序轉化也算一次。