Elasticsearch fuzzy query -- 模糊查詢
摘要
返回包含與搜索字詞相似的字詞文檔;爲了找到相似的術語,fuzzy查詢將在指定的編輯距離內創建一組搜索詞的所有可能的變體或擴展。查詢然後返回每個擴展的完全匹配。
如果search.allow_expensive_queries
設置爲false
,則不會執行模糊查詢。
編輯距離,是將一個術語轉換成另一個術語所需更改一個字符的次數(Levenshtein編輯距離衡量)。這些更改可以包括:
- 更改字符,
box → fox
- 刪除字符,
black → lack
- 插入字符,
sic → sick
- 轉置兩個字符,
act → cat
爲了查找相似的術語,模糊查詢會創建一個集合用來列舉所有可能的變體和擴展,染灰返回每個擴展的完全匹配。
參數
field
,想要搜索的字段
field 下級參數
value
,必填項,希望在field中找到的術語fuzziness
,選填項,匹配允許的最大編輯距離;參數說明max_expansions
,選填項,創建的最大變體項,默認爲50。應該避免使用較大的值,尤其是當prefix_length
參數值爲0時,如果過多,會影響查找性能。prefix_length
,選填項,創建擴展時保留不變的開始字符數。默認爲0transpositions
,選填項,指示編輯是否包括兩個相鄰字符串的轉置(ab→ba
)。默認爲true
rewrite
,選填項,用於重寫查詢的方法。高級用法。
請求示例
模糊查詢,Straet → Street
;也就是說,street
會在Straet
的擴展集合中出現。
GET bank/_search
{
"query": {
"fuzzy": {
"address": {
"value": "Straet",
"fuzziness": "AUTO",
"max_expansions": 50,
"prefix_length": 0,
"transpositions": true,
"rewrite": "constant_score"
}
}
}
}