多搜索模板 API

编辑

通过单个请求运行多个模板化搜索

resp = client.msearch_template(
    index="my-index",
    search_templates=[
        {},
        {
            "id": "my-search-template",
            "params": {
                "query_string": "hello world",
                "from": 0,
                "size": 10
            }
        },
        {},
        {
            "id": "my-other-search-template",
            "params": {
                "query_type": "match_all"
            }
        }
    ],
)
print(resp)
response = client.msearch_template(
  index: 'my-index',
  body: [
    {},
    {
      id: 'my-search-template',
      params: {
        query_string: 'hello world',
        from: 0,
        size: 10
      }
    },
    {},
    {
      id: 'my-other-search-template',
      params: {
        query_type: 'match_all'
      }
    }
  ]
)
puts response
const response = await client.msearchTemplate({
  index: "my-index",
  search_templates: [
    {},
    {
      id: "my-search-template",
      params: {
        query_string: "hello world",
        from: 0,
        size: 10,
      },
    },
    {},
    {
      id: "my-other-search-template",
      params: {
        query_type: "match_all",
      },
    },
  ],
});
console.log(response);
GET my-index/_msearch/template
{ }
{ "id": "my-search-template", "params": { "query_string": "hello world", "from": 0, "size": 10 }}
{ }
{ "id": "my-other-search-template", "params": { "query_type": "match_all" }}

请求

编辑

GET <target>/_msearch/template

GET _msearch/template

POST <target>/_msearch/template

POST _msearch/template

先决条件

编辑
  • 如果启用了 Elasticsearch 安全功能,您必须具有目标数据流、索引或别名的 read 索引权限。对于跨集群搜索,请参阅 远程集群

路径参数

编辑
<target>
(可选,字符串)要搜索的数据流、索引和别名的逗号分隔列表。支持通配符 (*)。要搜索所有数据流和索引,请省略此参数或使用 *

查询参数

编辑
ccs_minimize_roundtrips
(可选,布尔值)如果为 true,则会为跨集群搜索请求最大程度地减少网络往返次数。默认为 true
max_concurrent_searches
(可选,整数)API 可以运行的最大并发搜索数。默认为 max(1, (# of 数据节点 * min(搜索线程池大小, 10)))
rest_total_hits_as_int
(可选,布尔值)如果为 true,则响应将 hits.total 作为整数返回。如果为 false,则将其作为对象返回。默认为 false
search_type

(可选,字符串)搜索操作的类型。可用选项

  • query_then_fetch
  • dfs_query_then_fetch
typed_keys
(可选,布尔值)如果为 true,则响应会在聚合和建议器名称前加上各自的类型。默认为 false

请求正文

编辑

请求正文必须采用以下格式的换行符分隔的 JSON (NDJSON)

<header>\n
<body>\n
<header>\n
<body>\n

每个 <header><body> 对都表示一个搜索请求。

<header> 支持与 多搜索 API<header> 相同的参数。<body> 支持与 搜索模板 API 的请求正文相同的参数。

<header>

(必需,对象)用于限制或更改搜索的参数。

每个搜索正文都需要此对象,但可以为空 ({}) 或空白行。

<header> 对象的属性
allow_no_indices

(可选,布尔值)如果为 true,则当通配符表达式或 _all 值仅检索丢失或关闭的索引时,请求返回错误。

此参数也适用于指向丢失或索引的别名

expand_wildcards

(可选,字符串)通配符模式可以匹配的索引类型。如果请求可以以数据流为目标,则此参数确定通配符表达式是否匹配隐藏的数据流。支持逗号分隔的值,例如 open,hidden。有效值如下

all
匹配任何数据流或索引,包括隐藏的。
open
匹配打开的非隐藏索引。也匹配任何非隐藏数据流。
closed
匹配关闭的非隐藏索引。也匹配任何非隐藏数据流。数据流无法关闭。
hidden
匹配隐藏的数据流和隐藏的索引。必须与 openclosed 或两者结合使用。
none
不接受通配符模式。

默认为 open

ignore_unavailable
(可选,布尔值)如果为 true,则响应中不包括来自丢失或关闭的索引的文档。默认为 false
index

(可选,字符串或字符串数组)要搜索的数据流、索引和别名。支持通配符 (*)。将多个目标指定为数组。

如果未指定此参数,则将 <target> 请求路径参数用作回退。

preference
(可选,字符串)用于执行搜索的节点或分片。默认为随机。
request_cache
(可选,布尔值)如果为 true,则此搜索可以使用请求缓存。默认为索引级设置。请参阅分片请求缓存设置
routing
(可选,字符串)用于将搜索操作路由到特定分片的自定义路由值
search_type

(可选,字符串)指示在对返回的文档评分时是否应使用全局术语和文档频率。

选项包括

query_then_fetch
(默认)文档使用分片的本地术语和文档频率进行评分。这通常更快,但准确性较低。
dfs_query_then_fetch
文档使用所有分片的全局术语和文档频率进行评分。这通常较慢,但准确性更高。
<body>

(请求,对象)搜索的参数。

explain
(可选,布尔值)如果为 true,则返回有关评分计算的详细信息,作为每次命中的一部分。默认为 false
id
(必需*,字符串)要使用的搜索模板的 ID。如果未指定 source,则此参数是必需的。
params
(可选,对象)用于替换模板中 Mustache 变量的键值对。键是变量名。值是变量值。
profile
(可选,布尔值)如果为 true,则会对查询执行进行分析。默认为 false
source

(必需*,对象)内联搜索模板。支持与搜索 API 的请求正文相同的参数。还支持 Mustache 变量。

如果未指定 id,则此参数是必需的。

响应代码

编辑

仅当请求本身失败时,API 才会返回 400 状态代码。如果请求中的一个或多个搜索失败,则 API 将返回 200 状态代码,并在响应中为每个失败的搜索返回一个 error 对象。

响应正文

编辑
responses

(对象数组)每次搜索的结果,按提交顺序返回。每个对象都使用与搜索 API 的响应相同的属性。

如果搜索失败,则响应包括一个包含错误消息的 error 对象。

curl 请求

编辑

如果向 curl 提供文本文件或文本输入,请使用 --data-binary 标志而不是 -d 来保留换行符。

$ cat requests
{ "index": "my-index" }
{ "id": "my-search-template", "params": { "query_string": "hello world", "from": 0, "size": 10 }}
{ "index": "my-other-index" }
{ "id": "my-other-search-template", "params": { "query_type": "match_all" }}

$ curl -H "Content-Type: application/x-ndjson" -XGET localhost:9200/_msearch/template --data-binary "@requests"; echo