当前位置: 首页 > 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

相关文章:

  • 【c++继承篇】--继承之道:在C++的世界中编织血脉与传承
  • 生成订单号工具类
  • 目标检测新视野 | YOLO、SSD与Faster R-CNN三大目标检测模型深度对比分析
  • SpringBoot集成Mqtt服务实现消费发布和接收消费
  • IEC103 转 ModbusTCP 网关
  • 【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理
  • 基本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实现)
  • 低代码平台总览