Elasticsearch 异步搜索 Async search 实战

铭毅天下

共 3217字,需浏览 7分钟

 ·

2021-11-10 08:17

1、Elasticsearch 异步搜索定义

异步搜索 API 可异步执行搜索请求、监控其进度并检索可用的部分结果。

如下的官方介绍动画,能更加生动的介绍清楚异步检索。

传统检索 VS 异步检索,在数据量比较大时:

  • 传统检索可能导致超时,以至于无数据返回;或者需要等待很久,用户体验差。
  • 异步检索,可以快速响应数据,用户无需等待。

2、Elasticsearch 异步搜索发布的版本

Elasitcsearch V7.7.0版本。

3、Elasticsearch 异步搜索适用场景

异步搜索允许用户在异步搜索结果可用时检索它们,从而消除了仅在查询完全完成后才最终响应的情况。

4、Elasticsearch 异步搜索实战

4.1 执行异步检索

执行如下操作的前提是:待异步检索的索引数据量非常大(其实小了也可以,但数据量大更契合一些)。

否则普通索引会直接返回结果数据。

拿个普通索引试验一下:

POST kibana_sample_data_flights/_async_search?size=0
{
  "sort": [
    {
      "timestamp": {
        "order""asc"
      }
    }
  ],
  "aggs": {
    "sale_date": {
      "date_histogram": {
        "field""timestamp",
        "calendar_interval""1d"
      }
    }
  }
}

返回结果:

{
  "is_partial" : false,
  "is_running" : false,
  "start_time_in_millis" : 1628663114252,
  "expiration_time_in_millis" : 1629095114252,
  "response" : {
    "took" : 23,
    "timed_out" : false,
    "_shards" : {
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
    },
    "hits" : {
      "total" : {
        "value" : 10000,
        "relation" : "gte"
      },
      "max_score" : null,
      "hits" : [ ]
    },

为了达到异步检索的目的,可以用推荐的测试写入数据的工具:

https://github.com/oliver006/elasticsearch-test-data

你是不是也困惑,没有测试数据或者没有一定数量的测试数据?小工具来了。

产生100W+数据,一条指令:

python es_test_data.py --es_url=http://172.21.0.14:19205 --count=1000000

结果如下:

Done - total docs uploaded: 1000000, took 71 seconds

可以结合自己业务场景优化一下,python 代码编写,很适合封装成自己的小工具。

有了数据,异步检索直接开搞!

POST test_data/_async_search?size=0
{
  "sort": [
    {
      "last_updated": {
        "order""asc"
      }
    }
  ],
  "aggs": {
    "sale_date": {
      "date_histogram": {
        "field""last_updated",
        "calendar_interval""1d"
      }
    }
  }
}

返回结果如下:

{
  "id" : "FjUxQURkZFZyUVVlUUNydjVSZXhmWGcedFJCVnRVSVhSdVM0emN2YXZfTU9ZQToyNzE3MTcy",
  "is_partial" : true,
  "is_running" : true,
  "start_time_in_millis" : 1628662256012,
  "expiration_time_in_millis" : 1629094256012,
  "response" : {
    "took" : 1008,
    "timed_out" : false,
    "terminated_early" : false,
    "num_reduce_phases" : 0,
    "_shards" : {
      "total" : 1,
      "successful" : 0,
      "skipped" : 0,
      "failed" : 0
    },
    "hits" : {
      "total" : {
        "value" : 0,
        "relation" : "gte"
      },
      "max_score" : null,
      "hits" : [ ]
    }
  }
}

如果看不到上述结果,说明数据量还不够大。可以再导入一些。

核心返回参数解释一下:

  • id——可用于监控其进度、检索其结果和/或删除它的异步搜索的标识符。
  • is_partial——当查询不再运行时,指示在所有分片上搜索是失败还是成功完成。在执行查询时,is_partial 始终设置为 true。
  • is_running——搜索是否仍在执行中或已完成。
  • total——总体而言,将在多少个分片上执行搜索。
  • successful——有多少分片已成功完成搜索。

4.2 查看异步检索

GET /_async_search/FjFoeU8xMHJKUW9pd1dzN1g2Rm9wOGcedFJCVnRVSVhSdVM0emN2YXZfTU9ZQToyNjYyNjk5

4.3 查看异步检索状态

GET /_async_search/status/FjUxQURkZFZyUVVlUUNydjVSZXhmWGcedFJCVnRVSVhSdVM0emN2YXZfTU9ZQToyNzE3MTcy/

4.4 删除/中止异步检索

DELETE /_async_search/FjFoeU8xMHJKUW9pd1dzN1g2Rm9wOGcedFJCVnRVSVhSdVM0emN2YXZfTU9ZQToyNjYyNjk5

5、官方文档地址

https://www.elastic.co/guide/en/elasticsearch/reference/current/async-search.html

6、小结

异步搜索认证考试环节,大家了解就可以,能找到官方文档位置,知道有哪几个API。

实战业务环节结合业务需求去选型使用即可。但,更倾向于数据量极大的业务传统同步请求体验差的场景。

你实战业务场景有没有使用异步检索?欢迎留言讨论。

推荐

1、重磅 | 死磕 Elasticsearch 方法论认知清单(2021年国庆更新版)
2Elasticsearch 7.X 进阶实战私训课(口碑不错)

短时间快习得多干货!

已带领71位球友通过 Elastic 官方认证!

中国仅通过百余人

比同事抢先一步学习进阶干货
浏览 33
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报