调用ElasticSearch做分页查询时报错:

QueryPhaseExecutionException[Result window is too large, from + size must be less than or equal to: [10000] but was [666000]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.]; }

提示用from+size方式有1万条数据查询的限制,需要更改index.max_result_window参数的值。

翻了下elasticsearch官网的文档:

index.max_result_window
The maximum value of from + size for searches to this index.Defaults to 10000.
Search requests take heap memory and time proportional to from + size and this limits that memory.
See Scroll or Search After for a more efficient alternative to raising this.

说是用传统方式(from + size)查询占用内存空间且比较消耗时间,所以做了限制。

问题是用scroll方式做后台分页根本行不通。

不说用scroll方式只能一页页的翻这种不人性化的操作。页码一多,scrollId也很难管理啊。

所以继续鼓捣传统方式的分页。

上网查了下设置max_result_window的方法,全都是用crul或者http方式改的。

后来无意间看到了一篇文档: https://blog.csdn.net/tzconn/article/details/83309516

结合之前逛elastic中文社区的时候知道这个参数是索引级别的。于是小试了一下,结果竟然可以了。

java代码如下:

public SearchResponse search(String logIndex, String logType, QueryBuilder query, 
List<AggregationBuilder> agg, int page, int size) {
page = page > 0 ? page - 1 : page;
TransportClient client = getClient();
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(logIndex.split(","))
.setTypes(logType.split(","))
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.addSort("createTime", SortOrder.DESC); if (agg != null && !agg.isEmpty()) {
for (int i = 0; i < agg.size(); i++) {
searchRequestBuilder.addAggregation(agg.get(i));
}
}
updateIndexs(client, logIndex, page, size); SearchResponse searchResponse = searchRequestBuilder
.setQuery(query)
.setFrom(page * size)
.setSize(size)
.get();
return searchResponse;
} //更新索引的max_result_window参数
private boolean updateIndexs(TransportClient client, String indices, int from, 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();
}

搞定。

当然这段代码不好的地方在于:

每次查询超过10000万条记录的时候,都会去更新一次index。

这对原本就偏慢的from+size查询来说,更是雪上加霜了。

Java代码解决ElasticSearch的Result window is too large问题的更多相关文章

  1. elastic query match_all 数据目标超过10000条出错 Result window is too large

    起因 elastic做文本索引,match_all目标索引超过10000条时,出错 { "error": { "root_cause": [ { "t ...

  2. Result window is too large, from + size must be less than or equal to [10000]

    使用sql插件执行如下语句的时候报错http://10.127.0.1:9200/_sql?sql=select * from test limit 1000000 错误信息:{"error ...

  3. Result window is too large, from + size must be less than or equal to: [10000] but was [78440]. See the scroll api for a more efficient way to request large data sets

    {"error":{"root_cause":[{"type":"query_phase_execution_exception& ...

  4. 用java代码解决10元喝多少瓶汽水的问题

    问题:汽水2元一瓶,四个盖子换一瓶,两个空瓶一瓶,问10元可以喝几瓶?(不许借别人空瓶或瓶盖,但可以先喝汽水再付空酒瓶或瓶盖) 最近同事让笔者看了一道脑筋急转弯的数学题,当然不是很难,只要会加减法应该 ...

  5. 用java代码解决excel打开csv文件乱码问题

      Java 读取csv文件后,再保存到磁盘上,然后直接用Excel打开,你会发现里面都是乱码. 贴上代码: public class Test { public static void main(S ...

  6. Java代码操作Elasticsearch

    创建maven项目,导入依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</a ...

  7. Elasticsearch 的分页报错 result window is too large

    检查自己分页查询的代码 Pageable pageable = new PageRequest(0, 10000); searchQuery.setPageable(pageable); // 分页效 ...

  8. 【max_result_window大小】 Result window is too large的问题

    方法一: 如果需要搜索分页,可以通过from size组合来进行.from表示从第几行开始,size表示查询多少条文档.from默认为0,size默认为10, 如果搜索size大于10000,需要设置 ...

  9. 解决 Elasticsearch 超过 10000 条无法查询的问题

    解决 Elasticsearch 超过 10000 条无法查询的问题 问题描述 分页查询场景,当查询记录数超过 10000 条时,会报错. 使用 Kibana 的 Dev Tools 工具查询 从第 ...

随机推荐

  1. 在MyEclipse中怎么修改Servlet模板

    原Servlet模板实例 package www.csdn.net.servlet; import java.io.IOException; import java.io.PrintWriter; i ...

  2. 软件项目第一个Sprint评分

    第一组 跑男 跑男组他们设计的是极速蜗牛小游戏,他们的界面背景图片做的挺漂亮,现在为止也实现了大部分功能, 但是我没有太听懂他们的游戏规则. 因为蜗牛出发后,每次碰到屏幕边缘后都会有确定的反弹结果,也 ...

  3. 常用脚本--生成指定表的INSERT 语句

    --================================================= --摘抄自http://www.cnblogs.com/sunth/archive/2013/0 ...

  4. Windows和linux通过命令互传文件

    下载pscp https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 放在Windows的c:windows/system32下 ...

  5. HTML 属性绑定

  6. swagger 在本地正常调试 发布后出现500 : {"Message":"出现错误。"}

    点击项目属性 勾上xml 解决

  7. G - Ice_cream's world I (并查集)

    点击打开链接 ice_cream's world is a rich country, it has many fertile lands. Today, the queen of ice_cream ...

  8. 2018 OCP 052最新题库及答案-4

    4.For which requirement should you configure shared servers? A) accommodating an increasing number o ...

  9. “全栈2019”Java异常第二十一章:finally不被执行的情况

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  10. [JS] 四角度旋转特效

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...