开发者社区> 铭毅天下> 正文

Elasticsearch 异步搜索 Async search 实战

简介: 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 代码编写,很适合封装成自己的小工具。

image.png

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

image.png

4.3 查看异步检索状态

GET /_async_search/status/FjUxQURkZFZyUVVlUUNydjVSZXhmWGcedFJCVnRVSVhSdVM0emN2YXZfTU9ZQToyNzE3MTcy/

image.png

4.4 删除/中止异步检索

DELETE /_async_search/FjFoeU8xMHJKUW9pd1dzN1g2Rm9wOGcedFJCVnRVSVhSdVM0emN2YXZfTU9ZQToyNjYyNjk5

image.png

5、官方文档地址

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


6、小结

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


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


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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
变量、常量
变量、常量
4 0
手撸一款简单高效的线程池(五)
在之前的内容中,我们给大家介绍了 C++实现线程池过程中的一些常用线优化方案,并分析了不同机制使用时的利弊。这一篇,是线程池系列的最后一章。我们会介绍一下 CGraph 中的 threadpool 如何使用,给出性能对比,并对接下来的工作做一些展望。让我们在线程池性能优化和功能提升的道路上,越走越远。
5 0
记住这两个二分模板,秒杀所有二分查找算法题!
二分查找是一种在每次比较之后将查找空间一分为二的算法。当我们要处理的问题具备单调性,或者要搜寻序列的边界时,应该考虑使用二分查找算法
9 0
心中有“树”!图文并茂介绍数据结构中常见的树(一)
提到数据结构中的树(Tree) ,大家应该都不陌生,相关书籍中都有大段篇幅的介绍,刷 Leetcode 的时候会遇到很多相关问题。很多人往往会用 “手写红黑树” 来形容面试难度很高。
10 0
心中有“树”!图文并茂介绍数据结构中常见的树(二)
计算机科学家尼古拉斯·沃斯(Niklaus Wirth)曾说过:编程=数据结构+算法 ,可见数据结构在编程中的重要性。
5 0
心中有“树”!图文并茂介绍数据结构中常见的树(三)
在前面两篇文章中,我们简要介绍了数据结构中的各种【树】在搜索、数据库等领域的使用场景,希望对大家有所帮助。
11 0
Travis CI简介
什么是持续集成? Travis CI 提供的是持续集成服务(Continuous Integration,简称 CI)。它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。
8 0
Win系统 - 重装系统(微PE、MSDN镜像)【绝对纯净】
Win系统 - 重装系统(微PE、MSDN镜像)【绝对纯净】
14 0
Vue入门 基本使用 与 事务管理【1】
Vue入门 基本使用 与 事务管理【1】
9 0
+关注
348
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载