-
SearchBackEnd/Elasticsearch API 2025. 3. 20. 02:00반응형
URI Searches
POST /my_index/_doc/ { "content": "quick book", "publish_date": "2024-02-01" } POST /my_index/_doc/ { "content": "quick walk", "publish_date": "2024-03-01" } # URI Searches GET /my_index/_search?q=content:quick GET /my_index/_search?q=content:quick AND content:walk
DSL (Domain Specific Language) Queries
Basic Search
GET /my_index/_search { "query": { "match": { "content": "quick" } } }
Full-Text Search with Query String
GET /my_index/_search { "query": { "query_string": { "query": "quick" } } } GET /my_index/_search { "query": { "query_string": { "query": "quick OR brown", "fields": ["content"] } } }
Boolean Queries
여러 개의 쿼리를 논리적으로 결합하여 검색 결과를 필터링하는 데 사용됩니다.
- must: 반드시 일치해야 하는 조건
- should: 선택적으로 일치할 수 있는 조건
- must_not: 반드시 일치하지 않아야 하는 조건
- filter: 점수에 영향을 미치지 않고 문서를 필터링하는 조건
GET /my_index/_search { "query": { "bool": { "must": [ { "match": { "title": "Elasticsearch" } } ], "should": [ { "match": { "content": "search engine" } } ], "must_not": [ { "match": { "status": "draft" } } ], "filter": [ { "term": { "category": "tech" } } ] } } }
- 제목에 "Elasticsearch"가 포함되어야 합니다.
- 내용에 "search engine"가 포함될 수도 있습니다.
- 상태가 "draft"가 아니어야 합니다.
- 카테고리가 "tech"여야 합니다.
Range Queries
- (e.g., numeric ranges, date ranges)
GET /my_index/_search { "query": { "range": { "publish_date": { "gte": "2024-01-01", "lte": "2024-02-28" } } } }
Phrase Search
특정한 순서(Sequence)로 나열된 단어를 포함하는 문서를 검색하는 방법입니다. 즉, 검색어의 순서와 위치를 고려하여 정확한 문구를 찾는데 유용합니다.
GET /my_index/_search { "query": { "match_phrase": { "content": "quick book" } } }
Prefix Search
특정한 문자열로 시작하는 문서를 검색하는데 사용됩니다. 자동 완성 기능에 사용되며, 대소문자를 구분합니다.
GET /my_index/_search { "query": { "prefix": { "title": "Ela" } } }
Wildcard Search
- *: matches any character sequence (including an empty sequence)
- ?: matches any single character
GET /my_index/_search { "query": { "wildcard": { "content": "qui*" } } }
Regular Expression Search
정규 표현식 문법을 사용하여 문서를 검색하는데 사용됩니다.
GET /my_index/_search { "query": { "regexp": { "title": { "value": "elasti.*" } } } }
Ids Query
여러 개의 ID로 문서를 검색하는데 사용됩니다.
GET /my_index/_search { "query": { "ids": { "values": ["1", "2", "3"] } } }
Term Level Query
필드의 값과 정확히 일치하는 문서를 검색하는데 사용됩니다. 분석되지 않는 keyword, numeric, date, or boolean 필드에 사용됩니다.
# term Query (단수) GET /my_index/_search { "query": { "term": { "status": { "value": "active" } } } } # terms Query (복수) GET /my_index/_search { "query": { "terms": { "status": ["active", "inactive"] } } }
Exists Query
특정 필드가 존재하는 문서를 검색하는데 사용됩니다. 이는 필드가 비어 있지 않은지, 즉 null or 빈 배열이 아닌 값을 가지고 있는지를 확인합니다.
GET /my_index/_search { "query": { "exists": { "field": "user_id" } } }
Source Filter
검색 결과에서 반환되는 필드를 제어하는 기능입니다. 필요한 필드만 선택적으로 가져올 수 있어 네트워크 비용을 줄이고 성능을 향상시킬 수 있습니다.
- 소스 비활성화: "_source": false로 설정하면 검색 결과에 원본 문서를 포함하지 않습니다.
- 특정 필드만 포함: "_source": ["firstname", "lastname"]와 같이 배열로 필드를 지정합니다.
- 와일드카드 사용: "_source": "obj.*"와 같이 패턴을 사용하여 필드를 선택할 수 있습니다.
- 포함/제외 조합: includes와 excludes를 사용하여 더 복잡한 필터링이 가능합니다.
# 소스 비활성화 GET /my_index/_search { "_source": false, "query": { "match_all": {} } } # 특정 필드 포함 GET /my_index/_search { "_source": ["firstname", "lastname"], "query": { "match_all": {} } } # 중첩 객체의 필드 선택 GET /my_index/_search { "_source": "obj.*", "query": { "term": { "user": "kimchy" } } } # 포함/제외 GET /my_index/_search { "_source": { "includes": [ "obj1.*", "obj2.*" ], "excludes": [ "*.description" ] }, "query": { "term": { "user": "kimchy" } } }
Pagination
from과 size 파라미터를 사용합니다. 기본적으로 최대 10,000개의 결과까지만 접근 가능합니다 (index.max_result_window 설정으로 제한).
GET /index_name/_search { "from": 0, "size": 10, "query": { "match_all": {} } }
Sort
기본적으로 검색 결과를 관련성 점수(_score)에 따라 정렬합니다.
- 단일 필드 정렬: 특정 필드를 기준으로 오름차순(asc) 또는 내림차순(desc)으로 정렬
- 다중 필드 정렬: 여러 필드를 사용한 정렬 (순차적으로 적용)
- 스크립트 기반 정렬: 사용자 정의 스크립트를 사용한 정렬
# 다중 필드 정렬 GET /products/_search { "sort": [ { "category": "asc" }, { "price": "desc" } ] } # 스크립트 기반 정렬 # "kimchy"라는 사용자의 문서를 검색한 후, 각 문서의 field_name 필드 값에 1.1을 곱한 결과를 기준으로 오름차순 정렬합니다. GET /_search { "query": { "term": { "user": "kimchy" } }, "sort": { "_script": { "type": "number", "script": { "lang": "painless", "source": "doc['field_name'].value * params.factor", "params": { "factor": 1.1 } }, "order": "asc" } } }
[참고자료]
반응형'BackEnd > Elasticsearch API' 카테고리의 다른 글
Boosting (0) 2025.03.23 Full Text Search (0) 2025.03.22 Analyzer (0) 2025.03.18 Index Template (0) 2025.03.16 Alias & Reindex (0) 2025.03.15