2010-06-27 83 views
3

我想使用Lucene的模糊搜索,我的理解是基於某種類似Levenshtein的算法。如果我使用相當高的閾值(即,「紐約〜0.9」),將它首先計算編輯距離,然後看它是否比任何0.9對應於爲更小,或將其切斷的算法,如果它變得顯而易見的是該文件與緊密的查詢不匹配?我明白levenshtein算法是可能的。是lucene模糊搜索懶?

回答

2

如果顯然文檔與查詢不匹配,它會關閉算法嗎?

號你想看到的代碼行FuzzyTermEnum 57-59:

int dist = editDistance(text, target, textlen, targetlen); 
distance = 1 - ((double)dist/(double)Math.min(textlen, targetlen)); 
return (distance > FUZZY_THRESHOLD); 

你可以看到,它計算的距離,然後返回如果是小於閾值。

爲什麼你關心這個呢?除非您的條款長達數千個字符,否則計算完整編輯距離將非常快速。