'언젠가 읽기' 컨텐츠는 논문이나 영문 컨텐츠 등 언젠가 읽으려고 즐겨찾기 하고선
읽지 않고 계속 미룰만한 컨텐츠를 읽고 요약하거나 소개합니다.
Elasticsearch 퍼지 쿼리 작동 원리
언젠가 읽기
2025. 3. 10. AM 10:00:25
Elasticsearch 퍼지 쿼리란?
퍼지 쿼리는 Elasticsearch에서 사용하는 검색 방식 중 하나로, 철자 오류가 있는 단어를 효과적으로 검색할 수 있도록 도와줍니다. 기본적으로 데이터와 검색어 간의 유사성을 검사하여, 약간의 철자 오류가 있는 경우에도 원하는 결과를 찾을 수 있습니다. 예를 들어, 사용자가 "komputer"라고 검색했을 때 실제 데이터에 "computer"가 존재한다면, 퍼지 쿼리는 이 두 단어의 유사성을 인식하여 "computer"를 결과로 반환할 수 있습니다.
퍼지 쿼리 예시
GET products/_search
{
"query": {
"match": {
"productName": {
"query": "komputer",
"fuzziness": 1
}
}
}
}
- 인덱스: "products"
- 검색 필드: "productName"
- 검색어: "komputer" (철자 오류 포함)
- 퍼지니스(Fuzziness): 1 (최대 한 글자까지의 오류를 허용)
위 예시에서는 "komputer"라는 검색어를 사용하여 "productName" 필드에서 최대 한 글자까지의 철자 오류를 허용하여 검색을 수행합니다. 따라서 "computer", "koputer", "kompute" 등 유사한 단어들이 결과로 반환됩니다.
레벤슈타인 편집 거리 알고리즘
퍼지 쿼리의 핵심은 레벤슈타인(Edit Distance) 알고리즘에 있습니다. 이 알고리즘은 두 문자열 간의 유사성을 측정하는 방법으로, 한 문자열을 다른 문자열로 변경하는 데 필요한 최소한의 편집 연산(삽입, 삭제, 대체)의 수를 계산합니다.
예를 들어:
LD(computer, computer) = 0
- 두 단어가 동일하므로 편집 거리는 0입니다.
LD(komputer, computer) = 1
- 'k'를 'c'로 대체하는 한 번의 편집으로 동일해집니다.
LD(okmputer, computer) = 2
- 첫 번째 'o'를 'c'로, 두 번째 'k'를 삭제하여 두 번의 편집이 필요합니다.
퍼지 쿼리는 이러한 레벤슈타인 거리를 기반으로 하여, 사용자가 입력한 검색어와 데이터 간의 유사성을 평가하고, 설정된 퍼지니스 값 내에서 가장 유사한 결과를 반환합니다.
함께 읽으면 좋은 참고 자료
- Elasticsearch 공식 문서
- 레벤슈타인 알고리즘의 이해
- 퍼지 검색(Fuzzy Search) 기초