Link Search Menu Expand Document Documentation Menu

异步搜索

搜索大量数据可能需要很长时间,特别是当您跨热节点或多个远程集群进行搜索时。

OpenSearch 中的异步搜索允许您发送在后台运行的搜索请求。您可以监控这些搜索的进度,并在部分结果可用时获取它们。搜索完成后,您可以保存结果以便稍后查看。

REST API

1.0 版引入

要执行异步搜索,请向 _plugins/_asynchronous_search 发送请求,并将您的查询放在请求体中

POST _plugins/_asynchronous_search

您可以指定以下选项。

选项 描述 默认值 必需
wait_for_completion_timeout 您计划等待结果的时间。在此时间内,您可以像在常规搜索中一样看到您获得的任何结果。您可以根据 ID 轮询剩余结果。最大值为 300 秒。 1 秒
keep_on_completion 搜索完成后是否要在集群中保存结果。您可以稍后查看存储的结果。 false
keep_alive 结果在集群中保存的时间量。例如,2d 表示结果在集群中存储 48 小时。保存的搜索结果在此期限后或搜索被取消时被删除。请注意,这包括查询执行时间。如果查询超出此时间,进程将自动取消此查询。 12 小时
index 要搜索的索引名称。可以是单个名称、逗号分隔的索引列表或索引名称的通配符表达式。 集群中的所有索引

请求示例

POST _plugins/_asynchronous_search/?pretty&size=10&wait_for_completion_timeout=1ms&keep_on_completion=true&request_cache=false
{
  "aggs": {
    "city": {
      "terms": {
        "field": "city",
        "size": 10
      }
    }
  }
}

示例响应

{
  "*id*": "FklfVlU4eFdIUTh1Q1hyM3ZnT19fUVEUd29KLWZYUUI3TzRpdU5wMjRYOHgAAAAAAAAABg==",
  "state": "RUNNING",
  "start_time_in_millis": 1599833301297,
  "expiration_time_in_millis": 1600265301297,
  "response": {
    "took": 15,
    "timed_out": false,
    "terminated_early": false,
    "num_reduce_phases": 4,
    "_shards": {
      "total": 21,
      "successful": 4,
      "skipped": 0,
      "failed": 0
    },
    "hits": {
      "total": {
        "value": 807,
        "relation": "eq"
      },
      "max_score": null,
      "hits": []
    },
    "aggregations": {
      "city": {
        "doc_count_error_upper_bound": 16,
        "sum_other_doc_count": 403,
        "buckets": [
          {
            "key": "downsville",
            "doc_count": 1
          },
        ....
        ....
        ....
          {
            "key": "blairstown",
            "doc_count": 1
          }
        ]
      }
    }
  }
}

响应参数

选项 描述
id 异步搜索的 ID。使用此 ID 可以监控搜索进度、获取部分结果和/或删除结果。如果异步搜索在超时期限内完成,响应中不包含 ID,因为结果未存储在集群中。
state 指定搜索是仍在运行还是已完成,以及结果是否在集群中持久化。可能的状态包括 RUNNINGSUCCEEDEDFAILEDPERSISTINGPERSIST_SUCCEEDEDPERSIST_FAILEDCLOSEDSTORE_RESIDENT
start_time_in_millis 开始时间(毫秒)。
expiration_time_in_millis 过期时间(毫秒)。
took 搜索运行的总时间。
response 实际搜索响应。
num_reduce_phases 协调节点从分片响应批次中聚合结果的次数(默认为 5 次)。如果此数字与上次检索到的结果相比有所增加,则可以预期搜索响应中会包含更多结果。
total 运行搜索的分片总数。
successful 协调节点成功接收的分片响应数量。
aggregations 到目前为止分片已完成的部分聚合结果。

获取部分结果

1.0 版引入

提交异步搜索请求后,您可以使用在异步搜索响应中看到的 ID 请求部分响应。

GET _plugins/_asynchronous_search/<ID>?pretty

示例响应

{
  "id": "Fk9lQk5aWHJIUUltR2xGWnpVcWtFdVEURUN1SWZYUUJBVkFVMEJCTUlZUUoAAAAAAAAAAg==",
  "state": "STORE_RESIDENT",
  "start_time_in_millis": 1599833907465,
  "expiration_time_in_millis": 1600265907465,
  "response": {
    "took": 83,
    "timed_out": false,
    "_shards": {
      "total": 20,
      "successful": 20,
      "skipped": 0,
      "failed": 0
    },
    "hits": {
      "total": {
        "value": 1000,
        "relation": "eq"
      },
      "max_score": 1,
      "hits": [
        {
          "_index": "bank",
          "_id": "1",
          "_score": 1,
          "_source": {
            "email": "amberduke@abc.com",
            "city": "Brogan",
            "state": "IL"
          }
        },
       {....}
      ]
    },
    "aggregations": {
      "city": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 997,
        "buckets": [
          {
            "key": "belvoir",
            "doc_count": 2
          },
          {
            "key": "aberdeen",
            "doc_count": 1
          },
          {
            "key": "abiquiu",
            "doc_count": 1
          }
        ]
      }
    }
  }
}

响应成功持久化后,您将在响应中获得 STORE_RESIDENT 状态。

您可以使用 wait_for_completion_timeout 参数轮询 ID,以等待在您指定的时间内收到的结果。

对于 keep_on_completiontruekeep_alive 时间足够长的异步搜索,您可以持续轮询 ID 直到搜索完成。如果您不想定期轮询每个 ID,可以使用 keep_alive 参数将结果保留在集群中,并在以后再查看。

删除搜索和结果

1.0 版引入

要删除异步搜索

DELETE _plugins/_asynchronous_search/<ID>?pretty
  • 如果搜索仍在运行,OpenSearch 将取消它。
  • 如果搜索已完成,OpenSearch 将删除保存的结果。

示例响应

{
  "acknowledged": "true"
}

监控统计数据

1.0 版引入

您可以使用 stats API 操作来监控正在运行、已完成和/或已持久化的异步搜索。

GET _plugins/_asynchronous_search/stats

示例响应

{
  "_nodes": {
    "total": 8,
    "successful": 8,
    "failed": 0
  },
  "cluster_name": "264071961897:asynchronous-search",
  "nodes": {
    "JKEFl6pdRC-xNkKQauy7Yg": {
      "asynchronous_search_stats": {
        "submitted": 18236,
        "initialized": 112,
        "search_failed": 56,
        "search_completed": 56,
        "rejected": 18124,
        "persist_failed": 0,
        "cancelled": 1,
        "running_current": 399,
        "persisted": 100
      }
    }
  }
}

响应参数

选项 描述
已提交 已提交的异步搜索请求数量。
已初始化 已初始化的异步搜索请求数量。
已拒绝 已拒绝的异步搜索请求数量。
search_completed 成功响应完成的异步搜索请求数量。
search_failed 失败响应完成的异步搜索请求数量。
已持久化 最终结果成功持久化到集群的异步搜索请求数量。
持久化失败 最终结果未能持久化到集群的异步搜索请求数量。
running_current 在给定协调节点上运行的异步搜索请求数量。
已取消 搜索运行时被取消的异步搜索请求数量。

相关文章

剩余 350 字符

有问题?

想贡献?