Elasticsearch查询10000条限制解决方案

这篇具有很好参考价值的文章主要介绍了Elasticsearch查询10000条限制解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

问题描述

问题原因

解决方案


问题描述

Elasticsearch官方默认最多只能查询10000条数据,查询20000条数据开始就会报错:

Resultwindowis too large, from+ size must be less than or equal to: [10000] but was [20000]. See the scroll api for a more efficient way to request large data sets. This limit can be setby changing the [index.max_result_window] index level setting.

问题原因

max_result_window 是 Elasticsearch 中一个重要的搜索参数,它控制了单个搜索请求返回的最大结果数。具体来说,它定义了从搜索结果中的哪个位置开始返回结果,以及要返回多少个结果。

默认情况下,Elasticsearch 的 max_result_window 参数设置为 10000。这意味着,如果您执行一个搜索请求,请求的结果超过了 10000 条记录,那么只会返回前 10000 条记录,并且 Elasticsearch 会在响应中包含一个 hits.total 字段,该字段表示总共匹配了多少条记录。

如果您需要检索更多的结果,可以通过增加 from 和 size 参数来获取更多的结果,但是 from + size 不能超过 max_result_window 的值。如果您的搜索结果超过了 max_result_window 的值,那么 Elasticsearch 将会返回一个错误,提示您使用 scroll API 或者增加 max_result_window 的值来处理这个问题。

解决方案

方案一(max_result_window)

1.修改索引的 index.max_result_window

PUT /<index 或者 _all>/_settings
{
  "index.max_result_window": 100000
}

或者在配置文件elasticsearch.yml中增加下列配置,并重启elasticsearch。

index.max_result_window: 100000

或者在创建索引时添加最大上限设置

{
  "settings": {
    "index": {
      "max_result_window": 20000
    }
  }
}

需要注意的是,将 max_result_window 参数设置得太大可能会影响 Elasticsearch 的性能。因此,建议在使用 max_result_window 参数时,根据实际情况和性能要求来选择合适的值

2.代码中解除限制

在查询时候把 track_total_hits 设置为 true。

track_total_hits 设置为false禁用跟踪匹配查询的总点击次数

设置为true就会返回真实的命中条数。

NativeSearchQuery query = nativeSearchQueryBuilder.withTrackTotalHits(true).build();
	
//public NativeSearchQueryBuilder withTrackTotalHits(Boolean trackTotalHits) {
//	this.trackTotalHits = trackTotalHits;
//	return this;
//}

 3.在使用工具访问时添加track_total_hits设置

GET /<index 或者 _all>/_search
{
  "query": {
    "match_all": {}
  },
  "track_total_hits": true
}

方案二(scroll)

scroll 的方式,官方的建议不用于实时的请求,一般用于数据导出,每一个 scroll_id 不仅会占用大量的资源,而且会生成历史快照,对于数据的变更不会反映到快照上。

方案三(search_after)

search_after 分页的方式是根据上一页的最后一条数据来确定下一页的位置,同时在分页请求的过程中,如果有索引数据的增删改查,这些变更也会实时的反映到游标上。但是需要注意,因为每一页的数据依赖于上一页最后一条数据,所以无法跳页请求。

为了找到每一页最后一条数据,每个文档必须有一个全局唯一值,官方推荐使用 _uid 作为全局唯一值,其实使用业务层的 id 也可以。
 文章来源地址https://www.toymoban.com/news/detail-763692.html

到了这里,关于Elasticsearch查询10000条限制解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES查询时只能查询10000条数据解决方案

    方法1: 在restful请求时,解除索引最大查询数的限制 _all表示所有索引,如果针对单个索引的话修改成索引名称即可!!! 此时变可以查询300万条数据了,数据量太大可能存在超时问题,查询数据时加上超时参数。  方法2: 在创建索引的时候加上 方法3:         在查询时

    2024年02月11日
    浏览(33)
  • es解决只能默认查询10000条数据方案

    在使用es进行数据查询时,由于es官方默认限制了索引一次性最多只能查询10000条数据,这其实是es的一种保护机制,那么很多时候我们需要突破这种限制,例如需要进入数据同步的场景,则需要查询全部的数据,如何处理呢? 方案1:在设置索引属性时解除索引最大查询数的限

    2024年02月11日
    浏览(31)
  • [解决方案]基于Elasticsearch 为电商提供商品数据大数据查询

    对于现代电商的产品,维度的多员花,与一套强大的搜索引擎,那是非常必要的。今天我们主要是描述我们在从事电商搜索引擎过程中的遇到的一些问题和经验分享。 1、我们准备为我们需要做查找的数据做好一张视图,方便我们分析数据查找维度,与查找场景需求。附加代

    2024年02月09日
    浏览(34)
  • 解决 Elasticsearch 分页查询记录超过10000时异常

    查询结果中 hits.total.value 值最大为10000的限制 解决方法: 1、 请求设置rest_total_hits_as_int=true 注意参数需要放在请求头上 2、修改setting的值  

    2024年02月07日
    浏览(27)
  • Elasticsearch 8.X 聚合查询下的精度问题及其解决方案

    咕泡同学提问:我在看runtime文档的时候做个测试, agg求avg的时候不管是double还是long,数据都不准确,这种在生产环境中如何解决啊? 上述问题可以归类为:Elasticsearch聚合查询下的 精度 问题。 在日常的数据处理工作中,我们经常会遇到使用Elasticsearch进行大数据查询、统计

    2024年02月16日
    浏览(25)
  • ElasticSearch - DSL查询文档语法,以及深度分页问题、解决方案

    目录 一、DSL 查询文档语法 前言 1.1、DSL Query 基本语法 1.2、全文检索查询 1.2.1、match 查询 1.2.2、multi_match 1.3、精确查询 1.3.1、term 查询 1.3.2、range 查询 1.4、地理查询 1.4.1、geo_bounding_box 1.4.2、geo_distance 1.5、复合查询 1.5.1、相关性算分 1.5.2、function_score 1.5.3、boolean query 1.6、搜索

    2024年02月07日
    浏览(39)
  • elasticsearch结果窗口限制10000[from+size小于或等于10000]

    Elasicsearch版本7.8,执行DSL查询 结果Elasicsearch报如下错误 其实Elasicsearch这个错误已经提示的很明显了,甚至提出了解决方案。大概意思是说:结果窗口太大,from+size必须小于或等于10000,但我们检索的DSL中from+size=10001。我们在查询大量数据时可以采用 scroll api 这种高效的方式。

    2024年02月16日
    浏览(28)
  • ElasticSearch - 查询大于10000条的数据

    当我们使用 ES 的时候,有时会比较关心匹配到的文档总数是多少,所以在查询得到结果后会使用 hits.total.value 这个值作为匹配的总数。但是,es官方默认限制索引查询最多只能查询10000条数据。 因此可以将\\\"track_total_hits\\\"置为true ,解除最多查询10000条的限制:

    2024年02月16日
    浏览(35)
  • java使用ElasticSearch的scroll查询,高效的解决es查询数量的限制。

    (1)首先我们要明白es的查询机制:ES的搜索是分2个阶段进行的,即 Query阶段和Fetch阶段 。 Query阶段 比较轻量级,通过查询倒排索引,获取满足查询结果的文档ID列表。 Fetch阶段 比较重,需要将每个分片的查询结果取回,在协调结点进行 全局 排序。 通过From+size这种方式分批

    2024年02月03日
    浏览(69)
  • Elasticsearch-head访问 elasticsearch 报错 401 解决方案

    配置 值 系统 MacOS es 版本 8.3 401 报错本质没有权限, 先记住这个事.然后顺着这个思路去解决, 因为 elasticsearch 在启动时会运行 xpack(这东西是什么, 这里不做讨论) 当你第一次运行 elasticsearch 的时候它会 给你用户名, 密码, 以及 kibana 的 token(30分钟有效期)等, 这次运行之后你就会

    2024年01月17日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包