admin管理员组文章数量:1335185
【ES】
目录
- 一、前言
- 二、解决方法
- 2.1、修改max_result_window参数
- 2.2、修改track_total_hits 参数
- 2.3、结论
一、前言
工作遇到一个ES深度分页查询时出现报错,报错内容如下
ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Result window is too large, from + size must be less than or equal to: [10000] but was [10001].This limit can be set by changing the [index.max_result_window] index level setting.
出现这个问题的原因是:
ES为了避免用户的过大分页请求造成ES服务所在机器内存溢出,默认对深度分页的条数进行了限制,默认的最大条数是10000条
二、解决方法
2.1、修改max_result_window参数
修改es的默认窗口大小 — index.max_result_window
或者代码中动态修改参数,如下
//更新索引的max_result_window参数private boolean updateIndexs(TransportClient client, String indices, int records, int size) {int records = from * size + size;if (records <= 10000) return true;UpdateSettingsResponse indexResponse = client.admin().indices().prepareUpdateSettings(indices).setSettings(Settings.builder().put("index.max_result_window", records).build()).get();return indexResponse.isAcknowledged();}
2.2、修改track_total_hits 参数
出现上面的问题,实际是ES查询时的totalHits返回值>10000。为什么会出现这种情况呢?Elasticsearch 的 track_total_hits 参数是指追踪查询结果的总命中数。默认情况下,当查询结果总命中数大于 10,000 时,Elasticsearch 将停止精确地计算命中数,以避免对集群造成过大的压力。
track_total_hits 为 true,则 Elasticsearch 将返回精确的命中数,这些命中数会大于10000,但可能会对性能产生影响。
track_total_hits 为 false,则 Elasticsearch 可能会返回近似的命中数,并且不会超过10000,但可以提高查询性能。
2.3、结论
最佳的解决方案是track_total_hits 为false,在不影响性能下同时也满足我们的需要。
本文标签: ES
版权声明:本文标题:【ES】 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1701475089a413041.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论