Elasticsearch 查询10000条限制与totalhits值最大10000的解决

今天测试写的ES查询接口发现total值最大为10000,而且查询出的值也只有10000条多一条就报错,那怎么能行呢,必须的全查出来,于是根据报错进行了以下操作

es-head
然后进行了测试发现查询出的数据条数限制已经没有了,但是获取到的totalHits值还是10000,这样可不行,在进行了资料检索(百度)之后发现之前有人遇到过而且已经解决了,并且有源码的具体对应方法的截图
参考链接:https://elasticsearch.cn/question/7655

GET index/_search
{
	"track_total_hits": true
	"query":{
		"match":{
			"massage":"elasticsearch"
			}
		}
}

查询时启用了了track_total_hits于是我在Java中试着找了一下发现

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().trackTotalHits(true);

果然有对应的方法trackTotalHits(true),测试OK

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch中,通过使用Search After API可以解决默认返回10000数据的限制。这个API可以让你从上一个查询结果的最后一记录开始下一次查询。这个API需要一个游标参数,这个参数是上一次查询结果中最后一记录的排序,然后下一次查询时将这个参数传入就可以继续从这个游标位置开始查询。 在Java中使用Search After API,你需要使用SearchRequestBuilder和SearchResponse对象。首先,你需要构建一个SearchRequestBuilder实例,然后设置查询件和游标参数。接着,你可以通过execute()方法执行查询,并且可以从SearchResponse对象中获取结果。 以下是一个使用Search After API进行查询的示例代码: ``` SearchRequestBuilder searchRequestBuilder = client.prepareSearch("index_name") .setTypes("doc_type") .setQuery(QueryBuilders.matchAllQuery()) .addSort(SortBuilders.fieldSort("sort_field").order(SortOrder.ASC)) .setSize(100); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); while (true) { SearchHits hits = searchResponse.getHits(); if (hits.getHits().length == 0) { break; } for (SearchHit hit : hits) { // 处理查询结果 } // 获取最后一记录的排序作为游标参数 SearchHit lastHit = hits.getHits()[hits.getHits().length - 1]; Object[] sortValues = lastHit.getSortValues(); // 设置游标参数并继续查询 searchRequestBuilder = client.prepareSearch("index_name") .setTypes("doc_type") .setQuery(QueryBuilders.matchAllQuery()) .addSort(SortBuilders.fieldSort("sort_field").order(SortOrder.ASC)) .setSize(100) .setSearchAfter(sortValues); searchResponse = searchRequestBuilder.execute().actionGet(); } ``` 在上面的示例代码中,我们首先设置了查询件和排序参数,然后执行第一次查询,并且通过获取最后一记录的排序作为游标参数,然后设置游标参数并执行下一次查询,直到查询结果为空为止。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值