2010-06-27 4 views
3

Lucene의 퍼지 검색을 사용하고 싶습니다. Levenshtein과 유사한 알고리즘을 기반으로합니다. 상당히 높은 임계 값 (예 : "new ~ 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); 

당신은 그 다음, 거리를 계산하는 임계 값보다 작은 경우 반환 볼 수 있습니다.

왜 이렇게 신경 쓰나요? 검색어의 길이가 수천자를 넘지 않는 한 전체 편집 거리를 계산하는 것이 정말 빠릅니다.