怎样进行Elasticsearch 7.7 的异步搜索原理解析

技术怎样进行Elasticsearch 7.7 的异步搜索原理解析怎样进行Elasticsearch 7.7 的异步搜索原理解析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望

如何分析Elasticsearch 7.7的异步搜索原理,相信很多没有经验的人都不知所措。因此,本文总结了问题产生的原因和解决方法,希望大家可以通过这篇文章来解决这个问题。

Elasticsearch版本带来了一项新功能。搜索过程允许异步执行。客户端发送搜索请求后,弹性搜索服务器向客户端返回一个id。稍后,客户端使用该id来获取搜索进度,并支持返回“部分”结果。这对于UI交互相关的查询请求是非常友好的,比如绘图过程可以分步显示。

00-1010异步搜索使用起来非常简单,只需使用新的API,其余与_search请求相同:

POST /_async_search返回的结果中将有几个新字段:

id:根据这个id获取后续查询进度。is_partial:当查询完成时,此字段指示查询是在所有片段上成功执行还是失败。is_running:指示搜索过程是否仍在运行。

如果搜索很快完成,则_async_search的响应将包含完整的搜索结果。默认情况下,它将等待1秒钟,这由参数wait_for_completion_timeout控制。如果超过此时间,将根据id获得搜索进度(或结果):

GET/_ async _ search/fmrlde 8 zreveuza2zvpuegs2 ejffeamkz 5 qtvrstzsavn 3 wlnfvmtlwhjsdzoxmdc=$ ' ' cn=这里考虑得很周到。开启用户认证后,每个人只能得到自己提交的异步搜索结果,别人是看不到的。默认情况下,搜索结果保存5天,并由keep_alive参数控制。

同样,您可以手动删除此异步搜索请求,如果搜索仍在进行中,它将被取消。

delete/_ async _ search/fmrlde 8 zreveuza2zvpuegs2 ejffeamkz 5 qtvrstzsavn 3 wlnfvmtlwhjsdzoxmdc=

基本用法

异步搜索和同步搜索的实现原理没有太大区别,按数据节点搜索的过程是一样的。唯一不同的是,协调节点最初必须等待整个进程被处理后才能返回客户端,但现在它只等待1秒钟(由wait_for_completion_timeout参数控制)。如果整个过程在1秒内完成,最终结果将返回给客户端。超过1秒后,将生成一个id并返回给客户端。

通常情况下,数据节点在执行完一个片段的查询后,会返回一个完整片段级的Response,不会统计一个点,返回一个点,所以Response的单位仍然是片段级。但是,batched_reduce_size默认设置为5,在同步搜索中默认为512。较小的值可以尽快向客户端返回一些结果。

为了将查询结果保存5天,es将设置一个名为。异步搜索,并将查询结果保存到其中。但是,如果搜索过程在wait_for_completion_timeout超时内结束,所有结果集都将在当前请求中返回,并且不会保存到。异步搜索索引。

实现原理

异步搜索返回一个id,然后根据这个id获取进度。如何获取该任务信息?而进度和结果集需要存储在哪里是一个需要考虑的问题。es会把它放在两个地方:

如果搜索过程尚未完成,则从协调节点的taskmanager获取进度信息。

如果搜索完成,进度和结果集将保存在名为的索引中。异步搜索。

第一种情况,相当于进度信息存储在协调节点的内存中,这个信息只存在于整个集群的单个节点中。所以,当你的异步搜索请求发送到node1,获取进度的请求发送到node2(比如负载均衡器转发或者客户端自己轮询)时,如何获取node2中的进度信息?答案是node2会在收到GET请求后将请求转发给node1以获取进度。那么节点2如何知道异步搜索请求被发送到节点1呢?实际上,所有这些信息都存储在异步搜索请求返回的id中,所以现在您知道它为什么这么长了:

id ' : ' fmrlde 8 z rev uza 2 z puebgs 2 EJ jffeamkz 5 qtvrstzsavn 3 wlnfvmtlwhjsdzomdc='贺南强!贺南强!贺南强!贺南强!贺南强!贺南强!贺南强!贺南强!贺南强!贺南强!贺南强!贺南强!贺南强!贺南强身份证明(identification)号-什么64号基地{ fnsimheibord 1 sh ad1 pos(200,288)}这是我的错{ fnsimheibord 1 sh ad1 pos(200,288)}我的错{ fnsimheibord 1 sh ad1 pos(200,288)}我的错,范仲淹把范仲淹给范仲淹:

docIdo 40个

搜索结果保存 .async-search 中时,该异步搜索任务结果在 .async-search 中的 docId

  • nodeId 接收 asyncsearch 搜索请求的节点的 nodeId

  • id 在 taskManager 中的任务 id

  • 有了这些信息之后,GET 搜索进度的流程就比较清楚了:

    怎样进行Elasticsearch 7.7 的异步搜索原理解析

    协调节点收到 GET /_async_search/id 请求后,根据 id解码出上述三个信息,先判断执行_async_search的节点是否本节点,如果不是本节点就直接根据解码出的nodeId给目标节点发送RPC 请求来获取这个信息;如果是本节点,就根据任务 id从自己的 taskManager 中获取,或者根据docId执行一个普通的 GET doc请求,从 .async-search 索引中获取。

    .async-search 索引的过期删除

    索引 .async-search中的数据默认保存5天,不过大家都知道 es 里没有 TTL 的概念,那么数据的过期删除如何实现?实际上 es 内部会定期对该索引执行 DeleteByQuery:

    DeleteByQueryRequest toDelete = new DeleteByQueryRequest(INDEX)
                   .setQuery(QueryBuilders.rangeQuery(EXPIRATION_TIME_FIELD).lte(nowInMillis));

    当节点收到集群状态时,在 clusterChanged 中驱动周期线程执行清理,默认1小时执行一次,由参数 async_search.index_cleanup_interval 控制,该清理操作由 GENERIC 线程池执行,并且只会在 .async-search 索引的0号主分片所在的节点执行,不会在所有节点都执行清理工作。

    看完上述内容,你们掌握怎样进行Elasticsearch 7.7 的异步搜索原理解析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

    内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/132973.html

    (0)

    相关推荐

    • 如何理解数据管理流程

      技术如何理解数据管理流程这篇文章主要讲解了“如何理解数据管理流程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解数据管理流程”吧!一、基础思维数据在现在互联网的行业

      攻略 2021年10月22日
    • 电子邮箱怎么注册,应用开发者注册电子邮箱怎么

      技术电子邮箱怎么注册,应用开发者注册电子邮箱怎么1电子邮箱怎么注册、其实itunes store的账号很好注册的,首先你要你要有个自己没有注册过apple ID的电子邮箱地址,用于注册你的APPLE ID,QQ邮箱也可以

      生活 2021年10月28日
    • 如何使用Docker和Traefik搭建WordPress

      技术如何使用Docker和Traefik搭建WordPress这篇文章主要为大家展示了“如何使用Docker和Traefik搭建WordPress”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一

      攻略 2021年11月19日
    • 怎么解决mybatis一对多查询resultMap只返回了一条记录问题

      技术怎么解决mybatis一对多查询resultMap只返回了一条记录问题本篇内容介绍了“怎么解决mybatis一对多查询resultMap只返回了一条记录问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困

      攻略 2021年11月29日
    • Pandas怎样快速实现周、月、季度的日期聚合统计

      技术Pandas怎样快速实现周、月、季度的日期聚合统计Pandas怎样快速实现周、月、季度的日期聚合统计,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。大

      2021年11月15日
    • MySQL是如何保证数据不丢的

      技术MySQL是如何保证数据不丢的本篇内容主要讲解“MySQL是如何保证数据不丢的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL是如何保证数据不丢的”吧!

      攻略 2021年12月8日