유사 검색(퍼지 검색)
검색어와 완전히 일치하지 않는 단어도 검색하고 싶은 경우에는 유사 검색(퍼지 검색)을 사용할 수 있습니다. 철자 오류나 표기 차이 등으로 완전히 일치하지 않는 문서도 찾고 싶은 경우에 유용합니다. 유사 검색은 검색어와 인덱스에 등록되어 있는 단어 사이의 차이(편집 거리)가 일정 범위 이내이면 해당 단어를 일치하는 것으로 간주하여 검색하는 방법입니다. 편집 거리란 어떤 단어를 다른 단어로 변환하는 데 필요한 문자의 삽입・삭제・치환 등의 최소 횟수를 말합니다. Fess 에서는 기본적으로 이러한 조작에 더해 인접한 2 문자의 교체도 1 회의 차이로 계산하는 다메라우-레벤슈타인 거리 (optimal string alignment)를 사용합니다.
사용 방법
유사 검색을 적용하려는 검색어 뒤에 “~”를 추가합니다.
예를 들어, “Fess”라는 단어를 유사 검색하려는 경우 다음과 같이 검색 양식에 입력하면 “Fess”와 유사한 단어(“Fes” 등)를 포함하는 문서를 검색할 수 있습니다.
“~” 뒤에 숫자를 붙이면 허용할 편집 거리 (몇 문자까지의 차이를 허용할지)를 지정할 수 있습니다. 지정할 수 있는 값은 0, 1, 2 중 하나의 정수입니다.
위 예시의 경우 “Fess”와의 편집 거리가 1 이내인 단어를 검색합니다.
숫자를 생략하고 “~”만 지정한 경우에는 편집 거리 2로 처리됩니다. 편집 거리의 최댓값은 2이며, 3 이상의 값을 지정한 경우에도 2로 처리됩니다.
필드를 지정하여 유사 검색을 수행할 수도 있습니다. 다음 예에서는 title 필드에서 “Fess”와 유사한 단어를 포함하는 문서를 검색합니다.
필드를 지정하지 않은 경우에는 title 및 content 필드를 대상으로 유사 검색을 수행합니다.
사용 조건
유사 검색을 사용할 때는 다음 사항에 주의하십시오.
유사 검색은 단어 단위로 적용됩니다. 따옴표로 묶은 구문에는 적용할 수 없습니다. 또한 구문 뒤에 붙인 숫자 (예:
"Fess Search"~2)는 유사 검색이 아니라 단어 사이의 거리를 나타내는 근접 검색이 됩니다.유사 검색은 인덱스에 등록된 단어를 대상으로 수행되며, 검색어는 다시 분석되지 않습니다. 따라서 bi-gram이나 형태소 분석으로 토큰화되는 일본어 등의 텍스트에서는 예상대로 동작하지 않을 수 있습니다. 유사 검색은 주로 영숫자 단어에 유효합니다.
1~2 문자 등 매우 짧은 단어는 편집 거리가 단어 길이보다 작아야만 일치하므로, “~”를 붙여도 완전 일치에 가까운 동작이 되는 경우가 있습니다.
참고
유사 검색의 동작은 fess_config.properties 로 조정할 수 있습니다.
query.fuzzy.prefix_length(기본값:0): 앞에서부터 완전히 일치시킬 문자 수입니다. 값을 크게 하면 오류를 허용하는 범위가 좁아집니다.query.fuzzy.expansions(기본값:50): 일치 후보로 전개할 단어의 최대 수입니다.query.fuzzy.transpositions(기본값:true): 인접한 2 문자의 교체를 1 회의 편집으로 계산할지 여부를 지정합니다.true인 경우에는 다메라우-레벤슈타인 거리 (optimal string alignment),false인 경우에는 고전적인 레벤슈타인 거리가 됩니다.
참고
“~”를 붙이지 않는 일반 검색에서도 Fess 는 일정 길이 이상 (기본적으로 4 문자 이상)의 검색어에 대해 관련도를 높이기 위한 목적으로 약간의 가중치를 부여한 유사 일치를 자동으로 보조로 추가합니다 (query.boost.fuzzy.*). 이는 검색 결과의 순위를 조정하기 위한 기능이며, “~”에 의한 유사 검색과는 다른 방식입니다.