Elasticsearch:Async search API

Posted Elastic 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch:Async search API相关的知识,希望对你有一定的参考价值。

当我们想要执行持续时间较长的查询时,执行异步操作是一个很好的选择。 在这篇文章中,我们将学习如何管理异步查询。异步操作由 async search API 执行。 异步搜索 API 具有与 _search API 相同的参数,因此你无需构建特殊查询。

在我之前的文章 “Elasticsearch:异步搜索 - async search” 对异步请求有一个描述。我再之前的文章 “Elasticsearch: Python 客户端现在支持异步 I/O” 也对这个 API 在 Python 中的使用进行了描述。在今天的文章中,我们在 Kibana 中来模拟这个请求。

在今天的展示中,我将使用 Elastic Stack 8.6.0 来进行展示。

准备数据

我们使用 Kibana 中自带的数据:

  

这样我们就在 Elasticsearch 中创建了一个叫做 kibana_sample_data_logs 的索引。

异步查询

要运行异步查询,你需要使用 _async_search API 运行它。 让我们运行以下示例:

POST kibana_sample_data_logs/_async_search

  "query": 
    "match_all": 
  

上述命令返回的结果为:

答案与我们习惯在 _search API 中看到的不同。 现在我们有了属于异步搜索 API 的字段。 我将对 is_running 字段进行注释,它表示查询执行状态,结果表明查询已被执行。

我的数据库中的数据很少,因此为了使这个示例更有趣,我将添加参数 wait_for_completion_timeout=0ms。 这表示查询将等待 0 毫秒的响应,因为搜索所花的时间总会大于 0 毫秒,设置为 0 毫秒让我们看看 async_search 是如何工作的。

POST kibana_sample_data_logs/_async_search?wait_for_completion_timeout=0ms

请注意,is_running 为 true,表示查询尚未返回结果,现在我们有了 id 字段。 这个 id 字段允许你检索查询结果并跟踪状态。 

让我们看看查询的状态:

GET _async_search/status/FjBVQV9GTkMxVG9pZWNnYmhaZTVpZXcddFpMeTgyS1JUYWlDZHBzYmtFWW51QTo3OTgzOTA=

上面命令显示的结果为:

状态结果表明查询已执行,我们可以检索结果。

要获得结果,只需运行传递 id 的查询。

GET _async_search/FjBVQV9GTkMxVG9pZWNnYmhaZTVpZXcddFpMeTgyS1JUYWlDZHBzYmtFWW51QTo3OTgzOTA=

这是异步搜索 API 的一个应用程序。 我希望它有用!

以上是关于Elasticsearch:Async search API的主要内容,如果未能解决你的问题,请参考以下文章

elasticsearch之布尔查询

Elasticsearch:Async search API

Elasticsearch:Async search API

Elasticsearch报错:search.max_async_search_response_size

Elasticsearch报错:search.max_async_search_response_size

Elasticsearch 异步搜索 Async search 实战