Backend · Infra

[ElasticSearch] Query

devhyen 2024. 7. 9. 14:03

ElasticSearch

강력한 검색 및 분석 기능을 제공하는 분산 검색 엔진
데이터를 검색하기 위해 JSON 기반의 쿼리를 사용한다.
Query DSL(Domain Specific Language) 가 사용 된다.

 

Logstash과 Beats는 데이터를 수집, 집계 및 풍부화 하고 ElasticSearch에 저장하는 것을 용이하게 함.

Kibana를 사용하면 대화형으로 데이터 탐색, 시각화, 스택관리, 공유, 모니터링 할 수 있다.

ElasticSearch 는 모든 유형의 데이터에 대한 실시간 검색 및 분석을 제공한다.

구조화하거나 구조화되지 않은 텍스트, 숫자, 지리공간 등 빠른 검색을 지원하는 방식으로 저장하고 인덱싱할 수 있음.

_Search API

1. 정확한 값 검색

숫자,날짜, IP, 문자열 등의 정확한 값이나 범위 검색

2. 전문 텍스트 검색

구조화 되지 않은 텍스트 데이터를 쿼리하여 쿼리 용어와 가장 잘 일치하는 문서 찾기

3. 벡터 검색

ES에 벡터를 저장하고, 근사 최근접 이웃 또는 k-최근접 이웃 검색을 사용하여 유사한 벡터를 찾아서 의미 검색과 같은 사용 사례를 지원

기본 Elasticsearch 쿼리 종류

  1. Match Query
    • 특정 필드에서 주어진 텍스트와 일치하는 문서를 검색합니다.
{ "query": { "match": { "field_name": "search_text" } } }
  1. Term Query
    • 정확하게 주어진 값과 일치하는 문서를 검색합니다.
{ "query": { "term": { "field_name": "exact_value" } } }
  1. Range Query
    • 주어진 범위 내의 값을 가지는 문서를 검색합니다.
{ "query": { "range": { "field_name": { "gte": "start_value", "lte": "end_value" } } } }
  1. Bool Query
    • 여러 쿼리를 조합하여 복합적인 검색 조건을 설정합니다. must, should, must_not, filter 등을 사용할 수 있습니다.
{ "query": { "bool": { "must": [ { "match": { "field_name1": "search_text1" }}, { "term": { "field_name2": "exact_value" }} ], "filter": [ { "range": { "date_field": { "gte": "2023-01-01", "lte": "2023-12-31" }}} ] } } }
  1. Wildcard Query
    • 와일드카드 문자(*, ?)를 사용하여 패턴에 일치하는 문서를 검색합니다.
{ "query": { "wildcard": { "field_name": "wild*card?" } } }