Elasticsearch 异步搜索 Async search 实战

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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。


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


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

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
SQL JSON 大数据
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
这篇文章是Elasticsearch的进阶使用指南,涵盖了Search API的两种检索方式、Query DSL的基本语法和多种查询示例,包括全文检索、短语匹配、多字段匹配、复合查询、结果过滤、聚合操作以及Mapping的概念和操作,还讨论了Elasticsearch 7.x和8.x版本中type概念的变更和数据迁移的方法。
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
|
29天前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18797 20
因为一个问题、我新学了一门技术 ElasticSearch 分布式搜索
这篇文章讲述了作者因为一个检索问题而学习了ElasticSearch技术,并分享了排查和解决ElasticSearch检索结果与页面展示不符的过程。
因为一个问题、我新学了一门技术 ElasticSearch 分布式搜索
|
17天前
|
JSON 监控 Java
Elasticsearch 入门:搭建高性能搜索集群
【9月更文第2天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建。它能够处理大量的数据,提供快速的搜索响应。本教程将指导你如何从零开始搭建一个基本的 Elasticsearch 集群,并演示如何进行简单的索引和查询操作。
58 3
|
2月前
|
数据采集 人工智能 安全
阿里云Elasticsearch 企业级AI搜索方案发布
本文从AI搜索落地的挑战、阿里云在RAG场景的实践、效果提升三个方面,深度解读阿里云Elasticsearch 企业级AI搜索方案。
314 8
|
22天前
|
存储 人工智能 安全
保障隐私的Elasticsearch AI搜索解决方案
【8月更文第28天】随着大数据和人工智能技术的发展,搜索引擎在日常生活中扮演着越来越重要的角色。然而,用户隐私保护成为了一个不容忽视的问题。本文将探讨如何在确保用户数据隐私的同时,利用Elasticsearch实现智能搜索功能。我们将介绍一种综合方案,该方案结合了加密技术、差分隐私、匿名化处理以及安全多方计算等方法,以保障用户数据的安全性
56 0
|
1月前
|
数据采集 人工智能 自然语言处理
阿里云Elasticsearch AI语义搜索:解锁未来搜索新纪元,精准洞察数据背后的故事!
【8月更文挑战第2天】阿里云Elasticsearch AI场景语义搜索最佳实践
116 5
|
16天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
1月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
|
1月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。