ElasticSearch fuzziness 模糊查询

[[模糊]] === 模糊性能

模糊匹配 视两个单词 ``模糊'' 类似,正好像它们是同一个词. ((("typoes and misspellings", "fuzziness, defining"))) 首先, 咱们须要经过fuzziness 来定义什么是((("fuzziness"))).code

用来度量把一个单词转换为另外一个单词须要的单字符编辑次数 ((("Levenshtein distance"))). 他提出了3种单字符编辑:字符串

  • 替换 一个字符到另外一个字符: _f_ox -> _b_ox
  • 插入 一个新字符: sic -> sick
  • 删除 一个字符:: b_l_ack -> back

稍后扩展了这些操做并包含了1个新的 ((("Damerau, Frederick J."))):get

  • 换位 调整字符: _st_ar -> _ts_ar

例如,把 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&#x2014很远;远得没法被认为是一个简单的拼写错误. 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 ,你可能会得到更好的结果和性能.

相关文章
相关标签/搜索