接着学习MultiTermQuery下的另一个Query子类FuzzyQuery,它用于模糊相似度查询,那这里说的相似度是如何判定的?用到的是Damerau-Levenshtein算法,具体这个算法的原理我也不是很清楚,只知道个大概,Levenshtein中文一般翻译为编辑距,何为编辑距?即两个字符串有一个转变成另一个所需要的最小的操作步骤,这里说的操作步骤指的是插入一个字符或修改一个字符或者删除一个字符。比如:
shade / shadow
他们的编辑距就是2,这个不用解释的吧。理解了编辑距就可以了,至于算法怎么实现的,自己去网上搜索Damerau-Levenshtein算法的Java实现。
首先还是要看看官方API对FuzzyQuery是怎么描述的:
一些重点我用红色框框标注出来了,大意就是FuzzyQuery的相似度计算使用的Damerau-Levenshtein,FuzzyQuery的transpositions属性设置为false表示启用Damerau-Levenshtein来计算相似度的,而默认该算法