멀티 검색 템플릿 API
멀티 검색 템플릿 API (Multi-search Template API)
Multi-search Template API는 단일 API 요청에서 여러 검색 템플릿 요청을 실행해요.
도입 버전 1.0
엔드포인트
Multi-search Template API는 다음 경로를 사용해요:
GET /_msearch/template
POST /_msearch/template
GET /{index}/_msearch/template
POST /{index}/_msearch/template
쿼리 파라미터와 메타데이터 옵션
모든 파라미터는 선택 사항이에요. 일부는 각 검색의 메타데이터 줄의 일부로 개별 검색에 적용할 수도 있어요.
| 파라미터 | 유형 | 설명 | 메타데이터에서 지원 |
|---|---|---|---|
| allow_no_indices | Boolean | 어떤 인덱스와도 일치하지 않는 와일드카드를 무시할지 여부를 지정해요. 기본값은 true 예요. | 예 |
| cancel_after_time_interval | Time | 이 시간이 지나면 검색 요청이 취소될 시간 간격이에요. 부모 및 자식 요청 수준 모두에서 지원돼요. 우선 순위는 자식 수준 파라미터, 부모 수준 파라미터, 클러스터 설정 순이에요. 기본값은 -1 이에요. | 예 |
| css_minimize_roundtrips | Boolean | OpenSearch가 코디네이팅 노드와 원격 클러스터 사이의 네트워크 왕복 횟수를 최소화하려고 시도할지 지정해요(크로스 클러스터 검색 요청에만 적용). 기본값은 true 예요. | 아니요 |
| expand_wildcards | Enum | 와일드카드 표현식을 구체적인 인덱스로 확장해요. 여러 값을 쉼표로 결합해요. 지원 값은 all , open , closed , hidden , none 이에요. 기본값은 open 이에요. | 예 |
| ignore_unavailable | Boolean | 인덱스 목록의 인덱스나 샤드가 존재하지 않으면, 존재하지 않는 인덱스나 샤드를 쿼리 실패시키지 않고 무시할지 지정해요. 기본값은 false 예요. | 예 |
| max_concurrent_searches | Integer | 동시 검색의 최대 수예요. 기본값은 노드 수와 검색 스레드 풀 크기에 따라 달라져요. 값이 높을수록 성능이 좋아질 수 있지만 클러스터에 과부하가 걸릴 위험이 있어요. | 아니요 |
| max_concurrent_shard_requests | Integer | 각 검색이 노드당 실행하는 동시 샤드 요청의 최대 수예요. 기본값은 5 예요. 값이 높을수록 성능이 좋아질 수 있지만 클러스터에 과부하가 걸릴 위험이 있어요. | 아니요 |
| pre_filter_shard_size | Integer | 기본값은 128 이에요. | 아니요 |
| rest_total_hits_as_int | String | hits.total 속성을 정수( true )로 반환할지 객체( false )로 반환할지 지정해요. 기본값은 false 예요. | 아니요 |
| search_type | String | 관련성 점수에 영향을 줘요. 유효한 옵션은 query_then_fetch 와 dfs_query_then_fetch 예요. query_then_fetch 는 단일 샤드의 용어·문서 빈도를 사용해 문서에 점수를 매기고(더 빠르고 덜 정확), dfs_query_then_fetch 는 모든 샤드의 용어·문서 빈도를 사용해요(더 느리고 더 정확). 기본값은 query_then_fetch 예요. | 예 |
| typed_keys | Boolean | 응답에서 집계 이름에 내부 유형을 접두어로 붙일지 지정해요. 기본값은 false 예요. | 아니요 |
메타데이터 전용 옵션
일부 옵션은 전체 요청의 파라미터로 적용할 수 없어요. 대신 각 검색의 메타데이터 줄의 일부로 적용할 수 있어요. 모두 선택 사항이에요.
| 옵션 | 유형 | 설명 |
|---|---|---|
| index | String, String 배열 | URL에 인덱스나 여러 인덱스를 지정하지 않았거나(개별 검색에 대해 URL 값을 덮어쓰려는 경우) 이 옵션 아래에 포함할 수 있어요. "logs-*"나 ["my-store", "sample_data_ecommerce"] 같은 예가 있어요. |
| preference | String | 검색을 수행할 노드나 샤드를 지정해요. 이 설정은 테스트에 유용할 수 있지만 대부분의 상황에서 기본 동작이 가장 좋은 검색 지연 시간을 제공해요. 옵션에는 _local , _only_local , _prefer_nodes , _only_nodes , _shards 가 있어요. 마지막 세 옵션은 노드 또는 샤드 목록을 받아요. "_only_nodes:data-node1,data-node2"나 "_shards:0,1 같은 예가 있어요. |
| request_cache | Boolean | 결과를 캐시할지 지정하는데, 반복 검색의 지연 시간을 개선할 수 있어요. 기본값은 인덱스의 index.requests.cache.enable 설정을 사용하는 것이에요(새 인덱스의 기본값은 true). |
| routing | String | 쉼표로 구분된 사용자 지정 라우팅 값이에요. 예: "routing": "value1,value2,value3". |
요청 본문
멀티 검색 템플릿 요청 본문은 Multi-search API 패턴과 유사한 다음 형식을 따릅니다:
Metadata
Query
Metadata
Query
- 메타데이터 줄은 검색할 인덱스, 검색 유형 같은 옵션을 포함해요.
- 쿼리 줄은 query DSL을 사용해요.
bulk 작업과 마찬가지로 JSON을 최소화할 필요는 없어요. 공백은 괜찮지만 한 줄에 있어야 해요. OpenSearch는 새 줄 문자를 사용해 멀티 검색 요청을 파싱하며, 요청 본문이 새 줄 문자로 끝나야 해요.
예제 요청
다음 msearch/template API 요청 예제는 line_search_template과 play_search_template이라는 여러 템플릿을 사용해 단일 인덱스에 대해 쿼리를 실행해요:
GET /_msearch/template
{"index":"shakespeare"}
{"id":"line_search_template","params":{"text_entry":"All the world's a stage","limit":false,"size":2}}
{"index":"shakespeare"}
{"id":"play_search_template","params":{"play_name":"Henry IV"}}
예제 응답
OpenSearch는 멀티 검색 템플릿 요청의 순서와 같은 순서로 각 검색 결과를 담은 배열을 반환해요:
{
"took": 5,
"responses": [
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"status": 200
},
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"status": 200
}
]
}
출처: 문서