← 학습 카테고리

Learn

Elasticsearch

50개 모듈 · 현재 13번째

Elasticsearch 모듈 13/50 elasticsearch-learn-13

multi_match 쿼리 타입 — best_fields/most_fields/cross_fields

Elasticsearch multi_match 쿼리 타입 및 Profile API 공식 문서 종합 (웹 리서치, 2026) — Elastic 공식 문서(query-dsl-multi-match-query, search-profile) + Opster 기술 블로그 Elastic 공식 문서 Multi-match query

이 모듈을 다 읽으면

  • best_fields/most_fields/cross_fields 세 타입이 서로 다른 검색 의도를 반영한다는 것을 설명할 수 있다
  • 각 타입이 실제 사용 상황에 맞는지 판단할 수 있다

elasticsearch-learn-05에서 다룬 bool 쿼리를 전제로, 여러 필드에 걸쳐 검색어를 찾는 multi_match 쿼리의 세 가지 타입이 근본적으로 다른 매칭 전략을 쓴다는 것을 정리한다.

best_fields — '가장 잘 맞는 필드 하나'를 찾는다(기본값)

best_fields(기본 타입)는 검색어 전체가 하나의 필드 안에 몰려서 나타나는 경우를 찾는다 — 예를 들어 title이나 body 중 어느 한쪽에 검색어가 통째로 잘 매칭되는 문서를 찾을 때 적합하다. 내부적으로 각 필드마다 별도 match 쿼리를 만들어 dis_max(여러 후보 중 최고 점수만 취함)로 감싸고, 가장 점수가 높은 필드 하나의 점수를 대표 점수로 쓴다. tie_breaker 파라미터를 주면 최고점 필드 외의 나머지 필드 점수도 소량 반영해, 여러 필드에 걸쳐 조금씩 매칭되는 문서와 완전히 구분되게 할 수 있다.

핵심 포인트

  • best_fields(기본): 검색어 전체가 한 필드에 몰려 매칭되는 경우를 찾음 — 여러 필드 중 최고 점수 하나를 대표 점수로 사용
  • tie_breaker로 비-최고점 필드의 기여도를 소량 반영 가능

most_fields — 같은 내용을 여러 방식으로 분석해둔 필드들을 합산

most_fields는 같은 원본 텍스트를 서로 다른 analyzer로 분석해 여러 필드에 나눠 저장해둔 상황(예: 하나는 동의어/어간추출 적용, 하나는 원문 그대로, 하나는 shingle 적용)에서, 매칭되는 필드가 많을수록 더 관련도가 높다고 보고 그 필드들의 점수를 전부 합산한다. best_fields처럼 '하나만 잘 맞으면 충분'이 아니라 '여러 관점에서 다 맞을수록 좋다'는 철학이다.

핵심 포인트

  • most_fields: 같은 텍스트를 다르게 분석해둔 여러 필드에서 매칭될수록 점수를 합산 — '여러 관점에서 다 맞을수록 좋다'

cross_fields — 여러 필드를 '하나의 큰 필드'처럼 취급

cross_fields는 앞의 두 타입과 근본적으로 다른 접근(term-centric)을 쓴다 — first_name과 last_name처럼 의미상 분리된 필드들을, 검색어의 각 단어(term)가 '어느 필드에 있든' 매칭되는지를 기준으로 판단한다. 예를 들어 'John Smith'를 검색하면 'John'이 first_name에, 'Smith'가 last_name에 각각 있어도 이를 마치 하나의 합쳐진 필드에서 두 단어를 다 찾은 것처럼 취급해 매칭시킨다 — best_fields/most_fields의 field-centric 접근(필드 단위로 매칭을 본다)과 대비된다. 이름을 여러 필드로 쪼개 저장한 데이터에서 전체 이름 검색을 지원하려는 전형적인 용도다.

핵심 포인트

  • cross_fields: 여러 필드를 하나의 큰 필드처럼 취급해, 검색어의 각 단어가 '어느 필드에 있든' 매칭되면 인정(term-centric)
  • best_fields/most_fields는 field-centric(필드 단위로 매칭 판단)인 것과 대비 — 이름을 여러 필드로 쪼갠 데이터의 전체 이름 검색에 전형적으로 쓰인다