我想使用Lucene的模糊搜索,我理解它是基于某种类似Levenshtein的算法。如果我使用相当高的阈值(即“new york~0.9”),它会首先计算编辑距离,然后看它是否小于0.9对应的,或者如果它变得明显,它会切断算法文件与查询密切匹配?我知道这可以用levenshtein算法实现。
答案 0 :(得分:2)
如果文档显然与密切的查询不匹配,它会切断算法吗?
没有。您要查看的代码是FuzzyTermEnum的第57-59行:
int dist = editDistance(text, target, textlen, targetlen);
distance = 1 - ((double)dist / (double)Math.min(textlen, targetlen));
return (distance > FUZZY_THRESHOLD);
您可以看到它计算距离,如果小于阈值则返回。
为什么你关心这个?除非您的术语长度为数千个字符,否则计算完整的编辑距离将非常快。