미식가의 개발 일기

[Elasticsearch] Elasticsearch 검색 API 본문

Elasticsearch

[Elasticsearch] Elasticsearch 검색 API

대체불가 핫걸 2025. 7. 13. 14:23

🔍 Search API 기본 구조

_search 엔드포인트를 통해 인덱스 내 문서를 검색할 수 있다. 가장 기본적인 형태는 아래와 같다.

GET /my_index/_search
{
  "query": {
    "match": {
      "title": "elasticsearch"
    }
  }
}

 

🧠 자주 사용하는 쿼리 종류

 

Elasticsearch에서 쿼리는 Query DSL(Domain Specific Language)로 작성하며,

대표적으로 match, term, bool 쿼리가 많이 사용된다.

🔹 match 쿼리 – 자연어 검색

match 쿼리는 전체 텍스트 검색(full-text search)에 사용된다. 내부적으로 분석기(analyzer)가 적용되어 입력된 문자열을 나누고, 토큰을 기준으로 검색한다.

예를 들어 "machine learning"을 입력하면 "machine", "learning" 두 단어 중 하나라도 포함된 문서를 검색한다.
한국어의 경우 형태소 분석을 통해 "머신 러닝" 등도 잘 검색된다.

"query": {
  "match": {
    "title": "machine learning"
  }
}

 

🔹 term 쿼리 – 정확한 값 일치

term 쿼리는 정확히 일치하는 값만 검색할 때 사용된다. 분석기가 적용되지 않기 때문에, 일반적인 텍스트에는 잘 맞지 않고 정확한 키워드 검색에 적합하다.

"query": {
  "term": {
    "status": "approved"
  }
}

정확히 status 필드가 "approved"인 문서만 검색한다.
만약 텍스트 필드에 term 쿼리를 쓰고 싶다면 .keyword 형태로 사용해야 한다.

"term": { "title.keyword": "머신 러닝" }

 

 

🔹 bool 쿼리 – 조건 조합(AND / OR / NOT)

bool 쿼리는 여러 쿼리를 조합해서 사용할 수 있다. 대표적으로 must, should, must_not, filter 키워드를 포함한다.

must 모두 일치해야 함 (AND)
should 하나 이상 일치 (OR)
must_not 일치하면 제외 (NOT)
filter 점수 계산 없이 필터링 (성능 ↑)
"query": {
  "bool": {
    "must": [
      { "match": { "title": "AI" } },
      { "term": { "author.keyword": "강민지" } }
    ],
    "must_not": [
      { "term": { "category.keyword": "스포츠" } }
    ],
    "filter": [
      { "range": { "publish_year": { "gte": 2020 } } }
    ]
  }
}

 

 

⚙️ 주요 검색 옵션

query 검색 조건 설정
size 가져올 문서 개수 설정 (기본: 10)
from 페이지네이션 시작점 설정
_source 검색 응답에 포함시킬 필드 지정
sort 검색 결과 정렬
highlight 검색어 하이라이팅 표시
aggs 통계 및 집계 분석
post_filter 집계 유지한 채 결과 필터링
track_total_hits 총 문서 수 계산 방식 조절
explain / profile 쿼리 설명 및 성능 분석 도구
 

예를 들어, 다음과 같이 검색 결과를 정렬하고 일부 필드만 응답받을 수 있다.

{
  "query": { "match": { "title": "AI" } },
  "_source": ["title", "author"],
  "size": 5,
  "sort": [{ "publish_date": "desc" }]
}
반응형