当前位置: 首页 > article >正文

ES7 查询超过10000条 返回条数错误

es版本:7.10.2

java调用restful接口查询es数据,当es数据量超过10000时,total总是返回10000,代码如下:

JSONObject query = new JSONObject();
				JSONObject q = new JSONObject();
				q.put("bool", new JSONObject());
				query.put("query", q);
				query.put("from", 0);
				query.put("size", 1);
				while (true) {
					HttpPost post = new HttpPost(sourceUrl + "/" + indexName + "/_search");
					HttpEntity entity = new StringEntity(query.toString());
					post.setEntity(entity);
					post.addHeader("Authorization", "Basic " + getAuthorization(sourceUsername, sourcePassword));
					post.addHeader("Content-Type", "application/json");
					HttpResponse response = httpClient.execute(post);
					JSONObject ret = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
					int total = ret.getJSONObject("hits").getJSONObject("total").getInteger("value");
					//打印total  当数据超过10000条时,total总是10000
				}

解决办法:增加查询参数 "track_total_hits"

代码如下:

JSONObject query = new JSONObject();
				JSONObject q = new JSONObject();
				q.put("bool", new JSONObject());
				query.put("query", q);
				query.put("from", 0);
				query.put("size", 1);
				query.put("track_total_hits", true);//增加此行,数据超过10000条时,精准查询条数
				while (true) {
					HttpPost post = new HttpPost(sourceUrl + "/" + indexName + "/_search");
					HttpEntity entity = new StringEntity(query.toString());
					post.setEntity(entity);
					post.addHeader("Authorization", "Basic " + getAuthorization(sourceUsername, sourcePassword));
					post.addHeader("Content-Type", "application/json");
					HttpResponse response = httpClient.execute(post);
					JSONObject ret = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
					int total = ret.getJSONObject("hits").getJSONObject("total").getInteger("value");
				}

简单说明:

Elasticsearch 在 7.0 版本集成了 Lucene 8 并引入这个特性,track_total_hits 参数控制着es在返回查询结果时,如何计算匹配文档的总数。

track_total_hits 默认是false,当查询结果的总命中数超过一定阈值时(默认:10,000)es不再返回精确的命中数,而是返回一个下限值。

track_total_hits 设置为true时,强制es计算所有匹配文档的总数,但是此种方式会导致性能下降。


http://www.kler.cn/a/389990.html

相关文章:

  • 【大数据测试HBase数据库 — 详细教程(含实例与监控调优)】
  • C/C++精品项目之图床共享云存储(3):网络缓冲区类和main
  • GaussDB部署架构
  • 超市里的货物架调整(算法解析)|豆包MarsCode AI刷题
  • 红帽认证和华为认证哪个好?看完这4点你就明白了
  • Spark 的容错机制:保障数据处理的稳定性与高效性
  • 基本MFC类框架的俄罗斯方块游戏
  • 【动态规划】斐波那契数列模型总结
  • 四焦距聚焦型光场计算成像系统的设计
  • 我的博客网站为什么又回归Blazor了
  • 【jenkins】jenkins使用pipeline配置django项目
  • 服务器同步时间脚本
  • 【LeetCode】【算法】21. 合并两个有序链表
  • C++《stack与queue》
  • 水库大坝安全监测预警方法
  • 应用于新能源汽车NCV4275CDT50RKG车规级LDO线性电压调节器芯片
  • 在 Java 中使用脚本语言
  • 100种算法【Python版】第58篇——滤波算法之卡尔曼滤波
  • SpringBoot(十三)SpringBoot配置webSocket
  • 深度解读UI设计:从概念到实践一站式知晓
  • 从0开始机器学习--Day16--神经网络作业
  • uni-app文章列表制作⑧
  • 经典网络模型
  • 双指针(二)双指针到底是怎么个事
  • 图书管理系统(Java实现)
  • 低代码平台总览