【发布时间】:2010-06-27 06:28:12
【问题描述】:
我想使用 Lucene 的模糊搜索,据我了解,它基于某种类似于 Levenshtein 的算法。如果我使用相当高的阈值(即“new york~0.9”),它是否会首先计算编辑距离,然后查看它是否小于 0.9 对应的任何值,或者如果很明显它会切断算法文档与查询不匹配?我知道使用 levenshtein 算法可以做到这一点。
【问题讨论】:
标签: lucene fuzzy-search
我想使用 Lucene 的模糊搜索,据我了解,它基于某种类似于 Levenshtein 的算法。如果我使用相当高的阈值(即“new york~0.9”),它是否会首先计算编辑距离,然后查看它是否小于 0.9 对应的任何值,或者如果很明显它会切断算法文档与查询不匹配?我知道使用 levenshtein 算法可以做到这一点。
【问题讨论】:
标签: lucene fuzzy-search
如果文档明显与查询不匹配,它会切断算法吗?
没有。你想看的代码是 FuzzyTermEnum 的第 57-59 行:
int dist = editDistance(text, target, textlen, targetlen);
distance = 1 - ((double)dist / (double)Math.min(textlen, targetlen));
return (distance > FUZZY_THRESHOLD);
你可以看到它计算距离,如果小于阈值则返回。
你为什么要关心这个?除非您的术语有数千个字符长,否则计算完整的编辑距离会非常快。
【讨论】: