[[模糊]] === 模糊性能
模糊匹配 視兩個單詞 ``模糊'' 類似,正好像它們是同一個詞. ((("typoes and misspellings", "fuzziness, defining"))) 首先, 咱們須要經過fuzziness 來定義什麼是((("fuzziness"))).code
用來度量把一個單詞轉換爲另外一個單詞須要的單字符編輯次數 ((("Levenshtein distance"))). 他提出了3種單字符編輯:字符串
稍後擴展了這些操做幷包含了1個新的 ((("Damerau, Frederick J."))):get
例如,把 bieber 轉換爲 beaver 須要如下幾步:
用 v 替換掉 b: bie_b_er -> bie_v_er
用 a 替換掉 i: b_i_ever -> b_a_ever
換位 a 和 e : b_ae_ver -> b_ea_verit
以上的3步表明了3個 http://bit.ly/1ymgZPB[Damerau-Levenshtein edit distance(Damerau-Levenshtein編輯距離)].ast
顯然, bieber 距 beaver—很遠;遠得沒法被認爲是一個簡單的拼寫錯誤. Damerau發現 80% 的人類拼寫錯誤的編輯距離都是1. 換句話說, 80% 的拼寫錯誤均可以經過 單次編輯 修改成原始的字符串.擴展
經過指定 fuzziness
參數爲 2,Elasticsearch 支持最大的編輯距離.di
固然, 一個字符串的單次編輯次數依賴於它的長度. 對 hat 進行兩次編輯能夠獲得 mad, 因此容許對長度爲3的字符串進行兩次修改就太過了. fuzziness 參數能夠被設置成 AUTO, 結果會在下面的最大編輯距離中:co
0 、1或2個字符的字符串
1 、三、4或5個字符的字符串
2 、多於5個字符的字符串字符
固然, 你可能發現編輯距離爲2 仍然是太過了, 返回的結果好像並無什麼關聯. 把 fuzziness 設置爲 1 ,你可能會得到更好的結果和性能.