多重搜索模板
1.0 版引入
多重搜索模板 API 在单个 API 请求中运行多个搜索模板请求。
端点
多重搜索模板 API 使用以下路径
GET /_msearch/template
POST /_msearch/template
GET /{index}/_msearch/template
POST /{index}/_msearch/template
查询参数和元数据选项
所有参数均为可选。有些参数也可以作为每个元数据行的一部分应用于每次搜索。
参数 | 类型 | 描述 | 元数据中支持 |
---|---|---|---|
allow_no_indices | 布尔型 | 指定是否忽略不匹配任何索引的通配符。默认值为 true 。 | 是 |
cancel_after_time_interval | 时间 | 搜索请求将被取消的时间间隔。在父请求和子请求级别均支持。优先级顺序为子级别参数、父级别参数和集群设置。默认值为 -1 。 | 是 |
css_minimize_roundtrips | 布尔型 | 指定 OpenSearch 是否应尝试最小化协调节点和远程集群之间的网络往返次数(仅适用于跨集群搜索请求)。默认值为 true 。 | 否 |
expand_wildcards | 枚举 | 将通配符表达式扩展为具体索引。用逗号组合多个值。支持的值有 all 、open 、closed 、hidden 和 none 。默认值为 open 。 | 是 |
ignore_unavailable | 布尔型 | 如果索引列表中的索引或分片不存在,则此设置指定是忽略缺失的索引或分片,而不是使查询失败。默认值为 false 。 | 是 |
max_concurrent_searches | 整数 | 最大并发搜索数。默认值取决于您的节点计数和搜索线程池大小。更高的值可以提高性能,但可能会有集群过载的风险。 | 否 |
max_concurrent_shard_requests | 整数 | 每个搜索在每个节点上执行的最大并发分片请求数。默认值为 5 。更高的值可以提高性能,但可能会有集群过载的风险。 | 否 |
pre_filter_shard_size | 整数 | 默认值为 128 。 | 否 |
rest_total_hits_as_int | 字符串 | 指定 hits.total 属性是作为整数 (true ) 还是对象 (false ) 返回。默认值为 false 。 | 否 |
search_type | 字符串 | 影响相关性分数。有效选项是 query_then_fetch 和 dfs_query_then_fetch 。query_then_fetch 使用单个分片的术语和文档频率对文档进行评分(更快,准确性较低),而 dfs_query_then_fetch 使用所有分片的术语和文档频率(更慢,准确性更高)。默认值为 query_then_fetch 。 | 是 |
typed_keys | 布尔型 | 指定在响应中是否以其内部类型作为聚合名称的前缀。默认值为 false 。 | 否 |
仅限元数据选项
某些选项不能作为参数应用于整个请求。相反,您可以将它们作为每个元数据行的一部分,应用于每次搜索。所有选项均为可选。
选项 | 类型 | 描述 |
---|---|---|
index | 字符串,字符串数组 | 如果您未在 URL 中指定一个或多个索引(或希望覆盖单个搜索的 URL 值),则可以在此选项下包含它。示例包括 "logs-*" 和 ["my-store", "sample_data_ecommerce"] 。 |
preference | 字符串 | 指定要执行搜索的节点或分片。此设置对于测试可能很有用,但在大多数情况下,默认行为可提供最佳搜索延迟。选项包括 _local 、_only_local 、_prefer_nodes 、_only_nodes 和 _shards 。最后三个选项接受节点或分片列表。示例包括 "_only_nodes:data-node1,data-node2" 和 "_shards:0,1 。 |
request_cache | 布尔型 | 指定是否缓存结果,这可以提高重复搜索的延迟。默认是使用索引的 index.requests.cache.enable 设置(新索引默认为 true )。 |
路由 | 字符串 | 逗号分隔的自定义路由值,例如 "routing": "value1,value2,value3" 。 |
请求正文
多重搜索模板请求体遵循此模式,类似于多重搜索 API 模式
Metadata\n
Query\n
Metadata\n
Query\n
- 元数据行包括选项,例如要搜索的索引和搜索类型。
- 查询行使用查询 DSL。
与批量操作一样,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
}
]
}