Elasticsearch报错Result window is too large(query_phase_execution_exception)解决方案

windows安装Elasticsearch参考:
https://blog.csdn.net/MadLifeBin/article/details/120948598

问题

分页查询Elasticsearch,当请求的数据大于 10000 时,继续查询会报错
在这里插入图片描述

原因

Elasticsearch 不提倡使用 from + size 的方式请求深度分页,参考官网文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html
在这里插入图片描述

对于深度页面或大型结果集,这些操作会显著增加内存和CPU使用率,从而导致性能下降或节点故障。

同时我们看到有个WARNING,大致意思为:Elasticsearch使用Lucene的内部文档ID作为平局破坏者。这些内部文档ID可以在同一数据的多个副本之间完全不同。当分页搜索命中时,您可能偶尔会看到具有相同排序值的文档排序不一致。也就是在分页时偶尔会遇到文档重复或丢失的情况,不会像 MySQL一样严谨的分页。
这里需要回到 Elasticsearch 的底层原理,You Know, for Search。Elasticsearch在大部分场景下只需要关注第一页最匹配、得分最高的数据,只关注与 搜索,而针对大数据为了加强性能与搜索速度,会对数据进行分片,所以在分页时会有数据逻辑上乱序的情况。
在这里插入图片描述

解决方案

一.暴力法——设置 index.max_result_window

{ "index" : { "max_result_window" : 500000}}

二. Scroll

https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#scroll-search-results

三. Search After

https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#search-after

推荐使用 Search After

方式一不推荐,会牺牲性能和冒着节点故障的风险。
方式二可能在较早版本中使用,具体需要查询官网对应的版本文档。
在最新版本的 Elasticsearch 中,推荐使用 Search After
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值