멀티 검색 템플릿 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
    }
  ]
}

출처: 문서