[ElasticSearch] match_phrase_prefix, match_bool_prefix 쿼리 비교

Woong·2025년 1월 9일
0

ElasticSearch

목록 보기
27/28

match_bool_prefix 쿼리

  • 각 단어는 term 쿼리, 마지막 단어는 prefix 쿼리로 bool 쿼리 처리한다.
    • input 단어는 매칭하는 필드의 analyzer 로 분석 (default)
      • 다른 analyzer 적용하려면 analyzer 옵션 추가
    • match 쿼리의 minimum_should_match, operator 적용 가능
    • prefix 쿼리 적용되는 마지막 단어를 제외하고 term 쿼리 적용되는 각 단어는 아래 옵션들이 적용된다.
      • fuzziness, prefix_length, max_expansions, fuzzy_transpositions, fuzzy_rewrite
GET /_search
{
  "query": {
    "match_bool_prefix" : {
      "message" : "quick brown f"
    }
  }
}
  • ex) 각 단어 quick, brown 은 term 쿼리, 마지막 단어인 f 만 prefix 쿼리로 적용하여 bool 쿼리 should 처리
GET /_search
{
  "query": {
    "bool" : {
      "should": [
        { "term": { "message": "quick" }},
        { "term": { "message": "brown" }},
        { "prefix": { "message": "f"}}
      ]
    }
  }
}

match_phrase_prefix 쿼리

  • 마지막 단어만 prefix 쿼리, 그외 나머지 단어는 match_phrase 쿼리로 검색
GET /_search
{
  "query": {
    "match_phrase_prefix": {
      "message": {
        "query": "quick brown f"
      }
    }
  }
}
  • 주의) 자동완성에 사용하는 것은 부적합

    • ex) quick brown f 로 검색했을 때, quick, brown 이 phase 매칭되는 문서에서 정렬된 term dictionary 에서 첫 50개에 대해서만 f 로 시작하는 term 이 있는지 검색한다.
      • -> 50개 안에 f 로 시작하는 단어가 없으면 검색이 안된다.
  • 자동완성은 edge ngram 을 사용하는 것이 더 유리

    • (completion suggestion 는 한글에 대해서는 성능이 좋지 않다)

비교

  • 차이점
    • match_phrase_prefix 는 match_phase 쿼리이기 때문에 순서가 중요
    • match_bool_prefix 쿼리는 순서와 상관없이 매칭

reference

0개의 댓글

관련 채용 정보