Search API
Search API
search API 작업은 클러스터에서 데이터를 검색할 수 있게 해줘요.
도입 버전 1.0
엔드포인트
GET /{index}/_search
GET /_search
POST /{index}/_search
POST /_search
쿼리 파라미터
모든 파라미터는 선택 사항이에요.
많은 파라미터는 URL
q=파라미터나query_string쿼리를 사용할 때만 적용돼요. 자세한 내용은 Query string query를 참고하세요.
| 파라미터 | 유형 | 설명 |
|---|---|---|
| allow_no_indices | Boolean | 어떤 인덱스와도 일치하지 않는 와일드카드를 무시할지 여부예요. 기본값은 true 예요. 예: GET test-index-*/_search?allow_no_indices=true. |
| allow_partial_search_results | Boolean | 요청에서 오류가 발생하거나 타임아웃되면 부분 결과를 반환할지 여부예요. 기본값은 true 예요. 예: GET test-index/_search?allow_partial_search_results=false. |
| analyzer | String | 쿼리 문자열에서 사용할 분석기(analyzer)예요. q= 또는 query_string 본문이 필요해요. 예: GET test-index/_search?q=title:test&analyzer=standard. |
| analyze_wildcard | Boolean | update 작업이 분석에 와일드카드 및 접두어 쿼리를 포함할지 여부예요. 기본값은 false 예요. q= 또는 query_string 이 필요해요. 예: GET test-index/_search?q=title:te*&analyze_wildcard=true. |
| batched_reduce_size | Integer | 최종 검색 결과를 반환하기 전에 코디네이팅 노드에서 한 배치로 결합할 샤드 결과 수예요. 함께 처리되는 샤드 결과 수를 제한해, 검색 요청이 많은 샤드에 걸쳐 있을 때 메모리 사용을 줄이는 데 도움이 돼요. 기본값은 512 예요. 예: GET test-index/_search?batched_reduce_size=2. |
| cancel_after_time_interval | Time | 이 시간이 지나면 검색 요청이 취소될 시간이에요. 요청 수준 파라미터가 cancel_after_time_interval 클러스터 설정 보다 우선해요. 기본값은 -1 이에요. 예: GET test-index/_search?cancel_after_time_interval=10ms. |
| ccs_minimize_roundtrips | Boolean | 노드와 원격 클러스터 사이의 왕복 횟수를 최소화할지 여부예요. 기본값은 true 예요. 예: GET test-index/_search?ccs_minimize_roundtrips=true. |
| default_operator | String | 문자열 쿼리의 기본 연산자예요. 유효한 값은 AND 와 OR 예요. 기본값은 OR 예요. q= 또는 query_string 이 필요해요. 예: GET test-index/_search?q=title:test one&default_operator=AND. |
| df | String | 쿼리 문자열에 필드 접두어가 제공되지 않을 때 사용되는 기본 필드예요. q= 또는 query_string 이 필요해요. 예: GET test-index/_search?q=test&df=title. |
| docvalue_fields | String | doc values 표현에서 값을 반환할 필드의 쉼표로 구분된 목록이에요. Doc values는 집계, 정렬, 스크립팅의 성능을 개선하는 최적화된 컬럼형 형식이에요. 예: GET test-index/_search?docvalue_fields=ts,views. |
| expand_wildcards | String | 와일드카드 표현식이 일치할 수 있는 인덱스 유형을 지정해요. 쉼표로 구분된 값을 지원해요. 유효한 값은: - all : 숨겨진 것을 포함한 모든 인덱스와 일치. - closed : 닫혀 있고 숨겨지지 않은 인덱스와 일치. - hidden : 숨겨진 인덱스와 일치. open , closed 또는 둘 다와 결합해야 해요. - none : 와일드카드 표현식을 허용하지 않아요. - open : 열려 있고 숨겨지지 않은 인덱스와 일치. 기본값은 open 이에요. 예: GET test-index-*/_search?expand_wildcards=open. |
| explain | Boolean | true 면 OpenSearch가 각 문서의 관련성 점수를 어떻게 계산했는지에 대한 세부 정보를 반환해요. 기본값은 false 예요. 응답에 hits가 포함된 경우에만 적용돼요. 예: GET test-index/_search?explain=true&size=1&q=title:test. |
| from | Integer | 검색을 시작할 시작 인덱스예요. 기본값은 0 이에요. 예: GET test-index/_search?from=5&size=5. |
| ignore_throttled | Boolean | 구체적인 인덱스, 확장된 인덱스, 별칭이 있는 인덱스가 고정(frozen)된 경우 이를 무시할지 여부예요. 기본값은 true 예요. 예: GET test-index/_search?ignore_throttled=true. |
| ignore_unavailable | Boolean | true 면 OpenSearch는 검색 중에 없거나 닫힌 인덱스와 사용할 수 없는 샤드를 무시해요. false 면 요청이 없거나 닫힌 인덱스를 대상으로 할 때 오류를 반환해요. 기본값은 false 예요. 예: GET test-index-*/_search?ignore_unavailable=true. |
| include_named_queries_score | Boolean | 각 히트에 대해 명명된 쿼리( _name 이 있는 쿼리)의 점수 기여를 반환할지 여부예요. 기본값은 false 예요. _name 으로 명명된 쿼리가 필요해요. 예: POST test-index/_search?include_named_queries_score=true {"size":1,"query":{"match":{"title":{"query":"test","_name":"q1"}}}}. |
| lenient | Boolean | 쿼리에 형식 오류가 있을 때(예: 숫자 필드를 텍스트로 쿼리) 오류를 반환하는 대신 요청을 수락할지 여부예요. 기본값은 false 예요. q= 또는 query_string 이 필요해요. 예: GET test-index/_search?q=views:abc&lenient=true. |
| max_concurrent_shard_requests | Integer | 이 요청이 각 노드에서 실행해야 하는 최대 동시 샤드 요청 수예요. 기본값은 5 예요. 예: GET test-index/_search?max_concurrent_shard_requests=2. |
| node_level_query_fanout | Boolean | 제공 시 search.node_level_query_fanout.enabled 클러스터 설정을 덮어써 이 검색 요청에 노드 수준 쿼리 팬아웃(node-level query fan-out)을 사용할지 여부예요. 노드 수준 쿼리 팬아웃은 샤드 수준 query_then_fetch 쿼리와 can_match 요청을 대상 데이터 노드별로 그룹화해요. 기본값은 false 예요. 예: POST index1/_search?node_level_query_fanout=true. |
| phase_took | Boolean | 응답에 단계 수준의 took 시간 값을 반환할지 여부예요. 기본값은 false 예요. 예: GET test-index/_search?phase_took=true. |
| pre_filter_shard_size | Integer | 검색 샤드에 대한 사전 필터(prefilter) 작업을 트리거하기 위한 사전 필터 크기 임계값이에요. 검색 요청이 확장되는 샤드 수가 이 값을 초과하면 OpenSearch는 쿼리 다시 작성에 기반해 문서와 일치할 수 없는 샤드를 제거하는 사전 필터 작업을 수행해요. 기본값은 128 이에요. 예: GET test-index/_search?pre_filter_shard_size=1. |
| preference | String | OpenSearch가 검색을 수행해야 하는 샤드나 노드를 지정해요. 유효한 값은 preference 쿼리 파라미터 를 참고하세요. 예: GET test-index/_search?preference=_local. |
| q | String | Lucene 쿼리 문자열 쿼리예요. 쿼리 문자열 도우미를 활성화해요. 요청 본문의 query 파라미터보다 우선해요. 둘 다 지정되면 이 파라미터와 일치하는 문서만 반환되고 요청 본문의 쿼리는 무시돼요. 예: GET test-index/_search?q=title:test&size=5. |
| request_cache | Boolean | size=0 이 지정된 경우 요청에 대해 OpenSearch가 검색 결과 캐싱을 사용할지 여부예요. 기본값은 인덱스 수준의 request_cache 설정이에요. 예: GET test-index/_search?request_cache=true. |
| rest_total_hits_as_int | Boolean | hits.total 을 정수로 반환할지 여부예요. 그 외에는 객체를 반환해요. 기본값은 false 예요. track_total_hits 를 true 로 설정한 채 사용해요. 예: GET test-index/_search?track_total_hits=true&rest_total_hits_as_int=true. |
| routing | String | update by query 작업을 특정 샤드로 라우팅하는 데 사용되는 값이에요. 예: GET test-index/_search?routing=user-42. |
| scroll | Time | 검색 컨텍스트를 열어 둘 시간이에요. size 가 0보다 크고 후속 _search/scroll 이 필요해요. 예: GET test-index/_search?scroll=1m&size=2. |
| search_type | String | 관련성 점수를 계산할 때 OpenSearch가 전역 용어·문서 빈도를 사용할지 여부예요. 유효한 값은 query_then_fetch 와 dfs_query_then_fetch 예요. query_then_fetch 는 샤드의 로컬 용어·문서 빈도를 사용해 문서에 점수를 매겨요. 보통 더 빠르지만 덜 정확해요. dfs_query_then_fetch 는 모든 샤드의 전역 용어·문서 빈도를 사용해 문서에 점수를 매겨요. 보통 더 느리지만 더 정확해요. 기본값은 query_then_fetch 예요. 예: GET test-index/_search?search_type=dfs_query_then_fetch. |
| seq_no_primary_term | Boolean | 각 문서 히트의 마지막 작업의 시퀀스 번호와 주 용어(primary term)를 반환할지 여부예요. 예: GET test-index/_search?seq_no_primary_term=true&size=1&q=title:test. |
| size | Integer | 응답에 포함할 결과 수예요. 예: GET test-index/_search?size=3. |
| sort | List | 정렬할 <field>:<direction> 쌍의 쉼표로 구분된 목록이에요. 점수 필드가 아닌 필드로 정렬하면서 점수를 원한다면 track_scores=true 를 사용하세요. 예: GET test-index/_search?sort=views:desc&track_scores=true&size=3. |
| _source | String 또는 Boolean | 응답에 제공되는 _source 필드를 제어해요. 유효한 값은 true (문서 소스 반환), false (문서 소스 반환 안 함), GET test-index/_search?_source=false&size=1, GET test-index/_search?_source=titl*&size=1, GET test-index/_search?_source=title,description&size=1. |
| _source_excludes | List | 응답에서 제외할 소스 필드의 쉼표로 구분된 목록이에요. _source 파라미터가 false 면 이 파라미터는 무시돼요. 자세한 내용은 Source filtering 을 참고하세요. 예: GET test-index/_search?_source_excludes=title&size=1. |
| _source_includes | List | 응답에 포함할 소스 필드의 쉼표로 구분된 목록이에요. _source 파라미터가 false 면 이 파라미터는 무시돼요. 자세한 내용은 Source filtering 을 참고하세요. 예: GET test-index/_search?_source_includes=title&size=1. |
| stats | String | 요청과 연결할 검색 통계 그룹의 쉼표로 구분된 목록이에요. 예: GET test-index/_search?stats=group1. |
| stored_fields | List | GET 작업이 인덱스에 저장된 필드를 검색할지 여부예요. 기본값은 false 예요. 예: GET test-index-stored/_search?stored_fields=note&size=1. |
| terminate_after | Integer | 요청을 종료하기 전에 OpenSearch가 처리해야 하는 최대 일치 문서(hit) 수예요. 기본값은 0 (최대치 없음)이에요. 예: GET test-index/_search?terminate_after=1&size=10. |
| timeout | Time | 활성 샤드로부터 응답을 기다려야 하는 시간이에요. 기본값은 1m (1분)이에요. 예: GET test-index/_search?timeout=10ms. |
| track_scores | Boolean | 문서 점수를 반환할지 여부예요. 기본값은 false 예요. sort 와 함께 사용해요. 예: GET test-index/_search?sort=views:desc&track_scores=true&size=3. |
| track_total_hits | Boolean 또는 Integer | 일치 문서를 얼마나 세어야 할지예요. 기본값은 10000 이에요. 자세한 내용은 Track total hits 를 참고하세요. 예: GET test-index/_search?track_total_hits=2. |
| typed_keys | Boolean | 반환된 집계와 제안된 용어가 응답에 유형을 포함할지 여부예요. 기본값은 true 예요. 집계나 suggester에만 적용돼요. 예: POST test-index/_search?typed_keys=true {"size":0,"aggs":{"a":{"terms":{"field":"views"}}}}. |
| version | Boolean | 문서 버전을 일치 항목으로 포함할지 여부예요. 예: GET test-index/_search?version=true&size=1&q=title:test. |
preference 쿼리 파라미터
preference 쿼리 파라미터는 OpenSearch가 검색을 수행해야 하는 샤드나 노드를 지정해요. 유효한 값은 다음과 같아요:
_primary: 주 샤드에서만 검색을 수행해요._replica: 복제 샤드에서만 검색을 수행해요._primary_first: 주 샤드에서 검색을 수행하되, 주 샤드를 사용할 수 없으면 다른 사용 가능한 샤드로 장애 조치해요._replica_first: 복제 샤드에서 검색을 수행하되, 복제 샤드를 사용할 수 없으면 다른 사용 가능한 샤드로 장애 조치해요._local: 가능하면 로컬 노드의 샤드에서 검색을 수행해요._prefer_nodes:<node-id-1>,<node-id-2>: 가능하면 지정된 노드에서 검색을 수행해요. 여러 노드를 지정하려면 쉼표로 구분된 목록을 사용하세요._shards:<shard-id-1>,<shard-id-2>: 지정된 샤드에서만 검색을 수행해요. 여러 샤드를 지정하려면 쉼표로 구분된 목록을 사용하세요. 다른 선호도와 결합할 때_shards선호도가 먼저 나열되어야 해요. 예:_shards:1,2|_replica._only_nodes:<node-id-1>,<node-id-2>: 지정된 노드에서만 검색을 수행해요. 여러 노드를 지정하려면 쉼표로 구분된 목록을 사용하세요.<string>: 검색에 사용할 사용자 지정 문자열을 지정해요. 문자열은 밑줄 문자(_)로 시작할 수 없어요. 같은 사용자 지정 문자열을 가진 검색은 같은 샤드로 라우팅돼요.
요청 본문
모든 필드는 선택 사항이에요.
| 필드 | 유형 | 설명 |
|---|---|---|
| aggs | Object | 선택 사항인 aggs 파라미터에서 원하는 수의 집계를 정의할 수 있어요. 각 집계는 이름과 OpenSearch가 지원하는 집계 유형 중 하나로 정의돼요. 자세한 내용은 Aggregations 를 참고하세요. |
| docvalue_fields | 객체 배열 | doc_values 형식으로 반환할 필드예요. 반환 값에 형식을 포함할 수 있어요(예: 날짜 형식). knn_vector 필드의 경우 지원되는 형식은 binary (기본값, Base64 인코딩)와 array (JSON 숫자 배열)예요. 자세한 내용은 Retrieving vector fields using docvalue_fields 를 참고하세요. |
| fields | Array | 요청에서 검색할 필드예요. 날짜·시간 같은 특정 형식으로 결과를 반환하려면 형식을 지정하세요. |
| explain | String | OpenSearch가 문서의 점수를 어떻게 계산했는지에 대한 세부 정보를 반환할지 여부예요. 기본값은 false 예요. |
| from | Integer | 검색을 시작할 시작 인덱스예요. 기본값은 0이에요. |
| include_named_queries_score | Boolean | 명명된 쿼리의 점수를 반환할지 여부예요. |
| indices_boost | 객체 배열 | 특정 인덱스의 문서 _score 를 높여요. 각 항목은 <index>:<boost-multiplier> 형식으로 인덱스와 부스트 계수를 지정해요. 1.0보다 큰 부스트는 점수를 높이고, 0~1.0 사이의 부스트는 점수를 낮춰요. |
| min_score | Integer | 임계값을 지정해 이 임계값 위의 문서만 반환해요. |
| query | Object | 요청에서 사용할 DSL 쿼리예요. |
| seq_no_primary_term | Boolean | 각 문서 히트의 마지막 작업의 시퀀스 번호와 주 용어를 반환할지 여부예요. |
| size | Integer | 반환할 결과 수예요. 기본값은 10이에요. |
| sort | 객체 또는 문자열 배열 | 결과를 정렬하는 방법을 지정해요. 필드 이름, 필드 및 정렬 옵션이 있는 객체, 또는 이들의 배열일 수 있어요. Sorting results 를 참고하세요. |
| _source | Boolean, String, 문자열 배열 또는 Object | 각 히트에서 반환할 문서 소스 필드예요. 기본값은 true (전체 문서 반환)예요. 자세한 내용은 Source filtering 을 참고하세요. |
| stats | 문자열 배열 | 요청과 연결할 검색 통계 그룹 목록이에요. |
| suggest_field | String | 제안에 사용할 필드예요. suggest_text 와 함께, 선택적으로 suggest_mode 또는 suggest_size 와 함께 사용해요. |
| suggest_mode | String | 검색할 때 사용할 모드예요. 유효한 값은 always ( suggest_text 의 용어에 기반해 제안 제공), popular (검색 용어보다 샤드에서 더 많은 문서에 나타나는 제안 제공), missing (샤드에 없는 용어에 대한 제안 제공)이에요. suggest_field 와 suggest_text 가 필요해요. |
| suggest_size | Integer | 반환할 제안 수예요. suggest_field 와 suggest_text 가 필요해요. |
| suggest_text | String | OpenSearch가 제안을 반환해야 하는 입력 텍스트예요. suggest_field 와 suggest_text 가 필요해요. |
| terminate_after | Integer | 요청을 종료하기 전에 OpenSearch가 처리해야 하는 최대 일치 문서(hit) 수예요. 기본값은 0이에요. |
| timeout | Time | 응답을 기다릴 시간이에요. 기본값은 타임아웃 없음이에요. |
| version | Boolean | 응답에 문서 버전을 포함할지 여부예요. |
검색 통계 그룹 (Search stats groups)
요청 본문의 stats 필드나 쿼리 파라미터로 그룹 이름을 지정해 검색 요청을 하나 이상의 통계 그룹과 연결할 수 있어요. OpenSearch는 Index Stats API로 검색할 수 있는 그룹별 검색 통계를 유지해요.
다음 예제는 검색 요청을 두 그룹과 연결해요:
POST /my-index/_search
{
"query": {
"match_all": {}
},
"stats": ["group1", "group2"]
}
특정 그룹의 검색 통계를 검색하려면 Index Stats API의 groups 쿼리 파라미터를 사용하세요:
GET /my-index/_stats/search?groups=group1,group2
모든 그룹의 통계를 반환하려면 _all을 사용하세요:
GET /my-index/_stats/search?groups=_all
예제 요청
GET /movies/_search
{
"query": {
"match": {
"director": "Christopher Nolan"
}
}
}
예제 응답
다음 예제 응답은 검색 응답의 구조를 보여줘요:
{
"took": 14,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 0.42727602,
"hits": [
{
"_index": "movies",
"_id": "1",
"_score": 0.42727602,
"_source": {
"title": "The Dark Knight",
"director": "Christopher Nolan",
"year": 2008,
"genre": "Action"
}
},
{
"_index": "movies",
"_id": "2",
"_score": 0.42727602,
"_source": {
"title": "Inception",
"director": "Christopher Nolan",
"year": 2010,
"genre": "Science Fiction"
}
}
]
}
}
응답 본문 필드
다음 표는 최상위 응답 본문 필드를 보여줘요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| took | Integer | OpenSearch가 검색을 실행하는 데 걸린 시간(밀리초)이에요. 코디네이팅 노드가 요청을 받은 순간부터 응답을 보낼 준비가 될 때까지 측정되므로, 코디네이팅 노드와 데이터 노드 간의 통신, 검색 스레드 풀에서 대기한 시간, 검색 자체를 포함해요. 네트워크를 통한 요청 또는 응답 전송에 걸린 시간은 포함하지 않아요. |
| phase_took | Object | 각 검색 단계( can_match , dfs_pre_query , query , dfs_query , fetch , expand )에 소요된 시간(밀리초)이에요. phase_took 쿼리 파라미터가 true 인 경우에만 반환돼요. |
| timed_out | Boolean | 완료되기 전에 검색이 타임아웃되었는지 여부예요. true 면 반환된 결과가 부분적이거나 비어 있을 수 있어요. |
| terminated_early | Boolean | OpenSearch가 terminate_after 에 지정된 문서 수를 수집해 검색을 일찍 중지했는지 여부예요. terminate_after 가 설정된 경우에만 반환돼요. |
| _shards | Object | 검색이 실행된 샤드 수와 각 샤드 그룹의 결과예요. |
| hits | Object | 일치하는 문서와 그 메타데이터예요. |
| aggregations | Object | 집계 이름으로 키가 지정된 집계 결과예요. 요청 본문에 aggs 객체가 있는 경우에만 반환돼요. |
| suggest | Object | 제안기 이름으로 키가 지정된 제안 결과예요. 요청 본문에 suggest 객체가 있는 경우에만 반환돼요. |
| profile | Object | 쿼리 및 fetch 단계에 대한 샤드별 타이밍 세부 정보예요. 요청 본문이 profile 을 true 로 설정한 경우에만 반환돼요. 자세한 내용은 Profile API 를 참고하세요. |
| _scroll_id | String | 검색 컨텍스트를 식별하는 스크롤 ID예요. 이 값을 Scroll API에 전달해 다음 결과 배치를 검색해요. 요청에 scroll 쿼리 파라미터가 포함된 경우에만 반환돼요. |
| pit_id | String | 검색 컨텍스트를 식별하는 Point in Time(PIT) ID예요. 요청이 PIT를 검색하는 경우에만 반환돼요. 자세한 내용은 Point in Time API 를 참고하세요. |
| _clusters | Object | 크로스 클러스터 검색이 실행된 클러스터 수와 각 클러스터 그룹의 결과예요. 크로스 클러스터 검색에서만 반환돼요. |
| num_reduce_phases | Integer | OpenSearch가 부분 샤드 결과를 최종 결과 집합으로 결합하기 위해 수행한 reduce 단계 수예요. 검색이 둘 이상의 reduce 단계를 사용할 때만 반환돼요. |
다음 표는 _shards 객체의 필드를 보여줘요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| total | Integer | 검색이 쿼리해야 했던 샤드 수로, 할당되지 않은 샤드를 포함해요. |
| successful | Integer | 검색을 성공적으로 실행한 샤드 수예요. |
| skipped | Integer | 예비 검사에서 샤드의 어떤 문서도 일치할 수 없다고 판단해 검색을 건너뛴 샤드 수예요. 검색에 범위 필터가 포함되어 있고 샤드의 모든 값이 그 범위 밖에 있는 경우에 흔히 발생해요. |
| failed | Integer | 검색 실행에 실패한 샤드 수예요. 할당되지 않은 샤드는 성공도 실패도 아닌 것으로 간주되므로, successful 와 failed 가 total 보다 작게 합산되면 일부 샤드가 할당되지 않은 것이에요. |
다음 표는 hits 객체의 필드를 보여줘요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| total | Object | 일치하는 문서 수예요. 개수를 담은 value 필드와, 개수가 정확하면 eq 이고 개수가 하한이면 gte 인 relation 필드를 포함해요. track_total_hits 가 false 면 생략돼요. |
| max_score | Float | 일치하는 문서 중 가장 높은 _score 예요. 검색이 _score 로 정렬하지 않으면 null 이에요. |
| hits | 객체 배열 | 관련성 또는 지정된 정렬 순서로 정렬된 일치 문서예요. |
다음 표는 hits.hits 배열의 각 객체에 있는 필드를 보여줘요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| _index | String | 문서를 포함하는 인덱스의 이름이에요. |
| _id | String | 문서 ID예요. 이 ID는 반환된 인덱스 안에서만 고유해요. |
| _score | Float | 문서의 관련성 점수예요. 검색이 _score 로 정렬하지 않으면 null 이에요. |
| _source | Object | 인덱싱 시점에 제공된 원본 JSON 문서예요. 이 필드를 생략하거나 특정 필드만 반환하려면 Source filtering 을 참고하세요. |
| fields | Object | docvalue_fields 또는 stored_fields 로 검색된 필드 값이에요. 요청이 두 파라미터 중 하나를 지정한 경우에만 반환돼요. |
| sort | Array | 문서의 정렬 값이에요. 요청 본문에 sort 배열이 있는 경우에만 반환돼요. 마지막 히트의 값을 search_after 로 전달해 다음 결과 페이지를 검색해요. |
| highlight | Object | 필드 이름으로 키가 지정된 강조 표시된 스니펫이에요. 요청 본문에 highlight 객체가 있는 경우에만 반환돼요. |
| matched_queries | 문자열 배열 | 문서가 일치한 명명된 쿼리의 이름이에요. 검색이 _name 파라미터를 사용하는 경우에만 반환돼요. |
| inner_hits | Object | 일치하는 중첩, 자식 또는 부모 문서예요. 요청 본문에 inner_hits 객체가 있는 경우에만 반환돼요. |
| _explanation | Object | OpenSearch가 문서의 관련성 점수를 어떻게 계산했는지에 대한 분석이에요. explain 이 true 인 경우에만 반환돼요. |
| _shard | String | 문서를 반환한 샤드예요. explain 이 true 인 경우에만 반환돼요. |
| _node | String | 문서를 반환한 노드예요. explain 이 true 인 경우에만 반환돼요. |
Source filtering
응답의 각 히트에는 원본 JSON 문서를 담은 _source 객체가 있어요. 모든 히트에 대해 전체 문서를 반환하면 대부분의 애플리케이션이 필요로 하는 것보다 더 많은 데이터를 전송하게 돼요. Source filtering은 OpenSearch가 _source에서 반환하는 필드를 제한해요.
다음 표는 _source 요청 본문 파라미터의 허용 값을 보여줘요.
| 값 | 설명 |
|---|---|
| true | 전체 문서를 반환해요. 기본값이에요. |
| false | 각 히트에서 _source 객체를 생략해요. |
| String | details.* 같은 필드 이름 또는 와일드카드 패턴이에요. OpenSearch는 일치하는 필드만 반환해요. |
| 문자열 배열 | ["name", "details.*"] 같은 필드 이름 또는 와일드카드 패턴 목록이에요. |
| Object | includes 와 excludes 목록을 담은 객체예요. excludes 가 우선하므로 두 목록 모두의 패턴과 일치하는 필드는 반환되지 않아요. |
요청 본문 대신 요청 URL에서 소스를 필터링하려면 _source, _source_includes, _source_excludes 쿼리 파라미터를 사용하세요.
예시와 제한 사항은 Using source filtering을 참고하세요.
Track total hits
일치하는 문서를 정확하게 세려면 모든 일치 항목을 방문해야 하므로, 많은 문서와 일치하는 쿼리에는 비용이 들어요. track_total_hits 파라미터는 OpenSearch가 세는 일치 항목 수를 제한해요. 쿼리 파라미터로 지정하거나 요청 본문에 지정할 수 있어요.
기본적으로 OpenSearch는 10000까지 일치 항목을 정확하게 세요. 더 많은 문서가 일치하면 hits.total.value는 10000을 보고하고 hits.total.relation은 gte가 되어, 쿼리가 그 이상의 문서와 일치했음을 나타내요.
다음 표는 track_total_hits의 허용 값을 보여줘요.
| 값 | 설명 |
|---|---|
| true | 모든 일치 문서를 세요. hits.total.relation 은 항상 eq 예요. |
| false | 히트 계산을 비활성화해요. 응답에 hits.total 객체가 없어요. |
| Integer | 지정된 수까지 일치 문서를 정확하게 세요. 더 많은 문서가 일치하면 hits.total.value 는 임계값을 보고하고 hits.total.relation 은 gte 예요. |
모든 일치 항목을 세면 많은 문서와 일치하는 검색이 느려져요. 애플리케이션이 정확한 개수를 요구할 때만 임계값을 높이세요.
예제: 기본 히트 계산
다음 예제는 track_total_hits를 지정하지 않고 10,500개의 문서가 있는 logs 인덱스를 검색해요:
GET /logs/_search
{
"size": 0,
"query": {
"match_all": {}
}
}
relation이 gte이므로 인덱스에는 최소 10,000개의 일치 문서가 있어요:
{
"hits": {
"total": {
"value": 10000,
"relation": "gte"
},
"max_score": null,
"hits": []
}
}
예제: 모든 일치 문서 계산
모든 일치 항목을 세려면 track_total_hits를 true로 설정하세요:
GET /logs/_search
{
"size": 0,
"track_total_hits": true,
"query": {
"match_all": {}
}
}
relation이 eq이므로 value는 일치하는 문서의 정확한 수예요:
{
"hits": {
"total": {
"value": 10500,
"relation": "eq"
},
"max_score": null,
"hits": []
}
}
ext 객체
도입 버전 2.10
플러그인 작성자는 검색 요청과 검색 응답 모두에 ext 객체를 추가할 수 있어요. ext 객체는 플러그인별 필드를 담고 있어, 플러그인이 요청에 추가 파라미터를 전달하거나 응답에 추가 정보를 반환할 수 있게 해요.
검색 응답에서 ext 사용
플러그인은 검색 응답에 ext 객체를 추가해 플러그인별 응답 필드를 포함할 수 있어요. 예를 들어 대화형 검색에서 검색 증강 생성(RAG)의 결과는 단일 "히트"(답변)예요. 플러그인 작성자는 이 답변을 검색 히트와 분리되도록 ext 객체의 일부로 검색 응답에 포함할 수 있어요. 다음 예제 응답에서 RAG 결과는 ext.retrieval_augmented_generation.answer 필드에 있어요:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 110,
"relation": "eq"
},
"max_score": 0.55129033,
"hits": [
{
"_index": "...",
"_id": "...",
"_score": 0.55129033,
"_source": {
"text": "...",
"title": "..."
}
},
{
...
}
...
{
...
}
],
}, // end of hits
"ext": {
"retrieval_augmented_generation": { // a search response processor
"answer": "RAG answer"
}
}
}
검색 요청에서 ext 사용
플러그인은 검색 요청에 ext 객체를 받아 플러그인별 파라미터를 제공할 수도 있어요. 요청의 ext 객체 구조와 내용은 플러그인 구현에 따라 달라져요. 요청 ext 객체에서 지원되는 특정 필드는 플러그인 문서를 참고하세요.
다음 예제는 ext 객체를 포함한 검색 요청을 보여줘요. ext 안의 정확한 필드는 어떤 플러그인이 설치되어 있고 어떤 파라미터를 받는지에 따라 달라져요:
POST /my-index/_search
{
"query": {
"match": {
"field": "value"
}
},
"ext": {
"my_plugin": {
"custom_parameter": "value"
}
}
}
필요한 권한
Security 플러그인을 사용한다면 적절한 권한이 있는지 확인하세요: indices:data/read/search.
출처: 문서