异步搜索

搜索大量数据可能需要很长时间,尤其是在跨温节点或多个远程集群进行搜索时。

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

REST API

要执行异步搜索,请向 _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 到目前为止分片已完成的部分聚合结果。

获取部分结果

提交异步搜索请求后,您可以使用异步搜索响应中看到的 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 参数将结果保留在集群中,稍后再返回查看。

删除搜索和结果

要删除异步搜索:

DELETE _plugins/_asynchronous_search/<ID>?pretty
  • 如果搜索仍在运行,UDB-SX 会取消它。

  • 如果搜索已完成,UDB-SX 会删除保存的结果。

示例响应

{
  "acknowledged": "true"
}

监控统计信息

您可以使用统计信息 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
      }
    }
  }
}

响应参数

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