Link Search Menu Expand Document Documentation Menu

多重搜索

1.0 版引入

顾名思义,多重搜索操作允许您将多个搜索请求捆绑到单个请求中。OpenSearch 会并行执行这些搜索,因此与每次搜索发送一个请求相比,您可以更快地获得响应。OpenSearch 独立执行每个搜索,因此其中一个搜索的失败不会影响其他搜索。

端点

多重搜索 API 使用以下路径

GET _msearch
GET <index>/_msearch
POST _msearch
POST <index>/_msearch

查询参数和元数据选项

所有参数都是可选的。有些参数也可以作为每个元数据行的一部分,应用于每次搜索。

参数 类型 描述 元数据行中支持的参数
allow_no_indices 布尔型 是否忽略不匹配任何索引的通配符。默认值为 true
cancel_after_time_interval 时间 搜索请求将被取消的时间。在父级和子级请求级别均受支持。优先级顺序为
1. 子级参数
2. 父级参数
3. 集群设置
默认值为 -1。
css_minimize_roundtrips 布尔型 OpenSearch 是否应尝试最小化协调节点与远程集群之间的网络往返次数(仅适用于跨集群搜索请求)。默认值为 true
expand_wildcards 枚举 将通配符表达式扩展为具体的索引。多个值用逗号分隔。支持的值包括 allopenclosedhiddennone。默认值为 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_fetchdfs_query_then_fetchquery_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"

请求正文

多重搜索请求体遵循以下模式

Metadata\n
Query\n
Metadata\n
Query\n

  • 元数据行包括选项,例如要搜索的索引和搜索类型。
  • 查询行使用查询 DSL

就像批量操作一样,JSON 不需要被压缩——空格是可以的——但它必须在单行上。OpenSearch 使用换行符来解析多重搜索请求,并要求请求体以换行符结尾。

请求示例

以下 msearch API 请求示例对多个索引运行查询

GET _msearch
{ "index": "opensearch_dashboards_sample_data_logs"}
{ "query": { "match_all": {} }, "from": 0, "size": 10}
{ "index": "opensearch_dashboards_sample_data_ecommerce", "search_type": "dfs_query_then_fetch"}
{ "query": { "match_all": {} } }

示例响应

OpenSearch 返回一个数组,其中包含每个搜索的结果,其顺序与多重搜索请求中的顺序相同。

{
  "took" : 2150,
  "responses" : [
    {
      "took" : 2149,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 10000,
          "relation" : "gte"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "opensearch_dashboards_sample_data_logs",
            "_id" : "_fnhBXsBgv2Zxgu9dZ8Y",
            "_score" : 1.0,
            "_source" : {
              "agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)",
              "bytes" : 4657,
              "clientip" : "213.116.129.196",
              "extension" : "zip",
              "geo" : {
                "srcdest" : "CN:US",
                "src" : "CN",
                "dest" : "US",
                "coordinates" : {
                  "lat" : 42.35083333,
                  "lon" : -86.25613889
                }
              },
              "host" : "artifacts.opensearch.org",
              "index" : "opensearch_dashboards_sample_data_logs",
              "ip" : "213.116.129.196",
              "machine" : {
                "ram" : 16106127360,
                "os" : "ios"
              },
              "memory" : null,
              "message" : "213.116.129.196 - - [2018-07-30T14:12:11.387Z] \"GET /opensearch_dashboards/opensearch_dashboards-1.0.0-windows-x86_64.zip HTTP/1.1\" 200 4657 \"-\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\"",
              "phpmemory" : null,
              "referer" : "http://twitter.com/success/ellison-onizuka",
              "request" : "/opensearch_dashboards/opensearch_dashboards-1.0.0-windows-x86_64.zip",
              "response" : 200,
              "tags" : [
                "success",
                "info"
              ],
              "timestamp" : "2021-08-02T14:12:11.387Z",
              "url" : "https://artifacts.opensearch.org/downloads/opensearch_dashboards/opensearch_dashboards-1.0.0-windows-x86_64.zip",
              "utc_time" : "2021-08-02T14:12:11.387Z",
              "event" : {
                "dataset" : "sample_web_logs"
              }
            }
          },
          ...
        ]
      },
      "status" : 200
    },
    {
      "took" : 1473,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 4675,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "opensearch_dashboards_sample_data_ecommerce",
            "_id" : "efnhBXsBgv2Zxgu9ap7e",
            "_score" : 1.0,
            "_source" : {
              "category" : [
                "Women's Clothing"
              ],
              "currency" : "EUR",
              "customer_first_name" : "Gwen",
              "customer_full_name" : "Gwen Dennis",
              "customer_gender" : "FEMALE",
              "customer_id" : 26,
              "customer_last_name" : "Dennis",
              "customer_phone" : "",
              "day_of_week" : "Tuesday",
              "day_of_week_i" : 1,
              "email" : "gwen@dennis-family.zzz",
              "manufacturer" : [
                "Tigress Enterprises",
                "Gnomehouse mom"
              ],
              "order_date" : "2021-08-10T16:24:58+00:00",
              "order_id" : 576942,
              "products" : [
                {
                  "base_price" : 32.99,
                  "discount_percentage" : 0,
                  "quantity" : 1,
                  "manufacturer" : "Tigress Enterprises",
                  "tax_amount" : 0,
                  "product_id" : 22182,
                  "category" : "Women's Clothing",
                  "sku" : "ZO0036600366",
                  "taxless_price" : 32.99,
                  "unit_discount_amount" : 0,
                  "min_price" : 14.85,
                  "_id" : "sold_product_576942_22182",
                  "discount_amount" : 0,
                  "created_on" : "2016-12-20T16:24:58+00:00",
                  "product_name" : "Jersey dress - black/red",
                  "price" : 32.99,
                  "taxful_price" : 32.99,
                  "base_unit_price" : 32.99
                },
                {
                  "base_price" : 28.99,
                  "discount_percentage" : 0,
                  "quantity" : 1,
                  "manufacturer" : "Gnomehouse mom",
                  "tax_amount" : 0,
                  "product_id" : 14230,
                  "category" : "Women's Clothing",
                  "sku" : "ZO0234902349",
                  "taxless_price" : 28.99,
                  "unit_discount_amount" : 0,
                  "min_price" : 13.05,
                  "_id" : "sold_product_576942_14230",
                  "discount_amount" : 0,
                  "created_on" : "2016-12-20T16:24:58+00:00",
                  "product_name" : "Blouse - june bug",
                  "price" : 28.99,
                  "taxful_price" : 28.99,
                  "base_unit_price" : 28.99
                }
              ],
              "sku" : [
                "ZO0036600366",
                "ZO0234902349"
              ],
              "taxful_total_price" : 61.98,
              "taxless_total_price" : 61.98,
              "total_quantity" : 2,
              "total_unique_products" : 2,
              "type" : "order",
              "user" : "gwen",
              "geoip" : {
                "country_iso_code" : "US",
                "location" : {
                  "lon" : -118.2,
                  "lat" : 34.1
                },
                "region_name" : "California",
                "continent_name" : "North America",
                "city_name" : "Los Angeles"
              },
              "event" : {
                "dataset" : "sample_ecommerce"
              }
            }
          },
         ...
        ]
      },
      "status" : 200
    }
  ]
}
剩余 350 字符

有问题?

想要贡献?