[ElasticSearch] multi_match 로 여러 필드 중에서 검색하기

Woong·2023년 12월 21일
0

ElasticSearch

목록 보기
24/28

multi_match 쿼리

  • 여러 필드에 대해 match 적용하는 쿼리

  • type: best_fields, most_fields, cross_fields, phrase, phrase_prefix, bool_prefix

    • best_fields : 나열된 필드 중 제일 높은 score를 가져오기 (default 설정)
    • most_fields : 각 필드들에 match 하고 score 를 합산한다.
      • bool 쿼리로 should 로 match 한 것과 같은 결과
    • cross_fields : 같은 analyzer 가 적용된 필드들에 대해 1개 이상 매칭
    • phrase : 여러 필드에서 match_phrase 검색
      • 순서가 중요할 때 사용
    • phrase_prefix: 여러 필드에 match_phrase_prefix 실행
      • 구(phrase) 검색하되, 마지막 단어는 접두사(prefix) 처리 -> 자동완성에 유용
    • bool_prefix : most_fields 와 유사하지만 match 쿼리 대신 match_bool_prefix 쿼리 사용
      • 마지막 단어는 접두사 (prefix) 처리
GET /_search
{
  "query": {
    "multi_match" : {
      "query":      "quick brown fox",
      "type":       "most_fields",
      "fields":     [ "title", "title.original", "title.shingles" ]
    }
  }
}

cross_field 쿼리

  • 모든 term 이 최소한 1개 이상의 필드에 매칭되어야 검색된다.
    • 각 필드는 동일한 analyzer 가 적용되어야 사용 가능하다.
GET /_search
{
  "query": {
    "multi_match" : {
      "query":      "Will Smith",
      "type":       "cross_fields",
      "fields":     [ "first_name", "last_name" ],
      "operator":   "and"
    }
  }
}
  • edge ngram analyzer 가 적용된 필드라면 같은 edge ngram 적용된 필드들만 적용해야한다.
    • ex) .edge 하위 필드에 edge ngram 적용했다면 그 필드들로만 매칭
GET /_search
{
  "query": {
    "multi_match" : {
      "query":      "Jon",
      "type":       "cross_fields",
      "fields":     [
        "first", "first.edge",
        "last",  "last.edge"
      ]
    }
  }
}

reference

0개의 댓글

관련 채용 정보