[elasticsearch] fuzzy query

HI·2024년 8월 23일

elasticsearch Query DSL

목록 보기
3/4

fuzzy 쿼리

fuzzy 쿼리는 elasticsearch에서 제공하는 query dsl 으로 키워드와 유사한 단어를 검색해준다.
예를 들어서 apple을 검색하면 appie 같은 단어도 찾아준다.

일단 fuzzy 쿼리를 사용하는 방식이 여러가지가 있다.

1. fnzzy query 로 사용하기

GET /_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "ki"
      }
    }
  }
}

2. match queryfuzziness 옵션 주기

GET /_search
{
  "query": {
    "match": {
      "message": {
        "query": "this is a test",
        "fuzziness': AUTO
      }
    }
  }
}

두 쿼리의 차이점은 다음과 같다.

  • fuzzy 쿼리는 search_analyzer를 무시하고 검색
  • match+fuzziness 검색은 search_analyzer를 태운 뒤 fuzziness옵션이 적용

예를 들어서,
search_analyzer로 영문 형태소분석을 적용하여 plays가 play로 분석이 되면,
match+fuzziness 검색은 plays 로 검색시 play, plays 두 가지 키워드를 확장해서 검색세트를 만들고 이를 검색한다.
하지만 fuzzy쿼리 검색은 play 자체만 확장하여 검색세트를 구성해 검색 한다.

이에 대해 자세한 설명은 fuzzy쿼리 동작 방식 에 자세히 기재되어 있다.
공통적인 fuzzy의 작동방식은 다음과 같다.

fuzzy 작동 방식

  • 검색어를 확장한 검색어 세트를 만들고 이들을 검색한다.
    예시) 검색어[box] -> 검색어확장[aox, eox,bix.bx...등] -> 확장된 검색어 검색
  • 검색어 확장은 검색어분석(search_analyzer)에 따라 각각 생성됨.
    " 예시) plays -> [""play"",""plays""] => 검색어 확장[""play""=>""oplay"",""pplay"" ....] => 검색
    [""plays"" -> ""pplays"",""piays ""....]"
  • 그래서 검색어분석(search_analyzer) 방식에 따라 fuzzy 검색 결과 다름.

0개의 댓글