elasticsearch分页获取数据(2)

    	println(s.getSourceAsString());

    }

}	



但是上述方式有一个严重的缺陷:from和size不能太大,两者之和不能超过index.max\_result\_window,超过该值就会报



org.elasticsearch.client.ResponseException异常



Result window is too large, from + size must be less than or equal to: \[10000\] but was \[11010\] 



为什么会使用index.max\_result\_window来限制搜索深度,因为这需要耗费大量内存,比如from为10000,es会按照一定的顺序从每个分片读取10010个数据,然后取出每个分片中排序前10的数据返回给协调节点,协调节点会将从所有分片节点返回的10条数据再次进行统一排序处理,以此来返回全局排序前10的数据,如果有类似的需要可以使用scroll以及search after来实现超大分页问题,



scroll分页示例代码可以参考:[https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.8/java-rest-high-search-scroll.html]( )



search after示例可以参考下面代码:



/**

 * search after

 * @throws IOException

 */

@Test

public void searchAfter() throws IOException{

	SearchRequest searchRequest = new SearchRequest("sub_bank1031");

	SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

	searchSourceBuilder.query(QueryBuilders.matchQuery("cityId", "511000"));

	searchSourceBuilder.size(2);

    //id动态映射为text类型,排序不能使用分词的字段,所以这里选择了id的keyword多字段属性

	searchSourceBuilder.sort(new FieldSortBuilder("id.keyword").order(SortOrder.ASC));

	//

	searchRequest.source(searchSourceBuilder);

	SearchResponse searchResponse = highLevelClient.search(searchRequest, RequestOptions.DEFAULT); 

	SearchHit[] searchHits = searchResponse.getHits().getHits();

	if(searchHits.length >0){

	    for(SearchHit s:searchHits){

	    	println(s.getSourceAsString());

	    }

	    JSONObject json = JSON.parseObject(searchHits[searchHits.length-1].getSourceAsString());

	    String id = json.getString("id");

	    searchSourceBuilder.searchAfter(new Object[]{id});

	    searchRequest.source(searchSourceBuilder);

	    searchResponse = highLevelClient.search(searchRequest, RequestOptions.DEFAULT); 

	    for(SearchHit s:searchHits){

	    	println(s.getSourceAsString());

	    }		    

最后希望可以帮助到大家!

千千万万要记得:多刷题!!多刷题!!

之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!

篇幅有限,以下只能截图分享部分的资源!!

(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)

image

(2)刷的算法题(还有左神的算法笔记)

image

(3)面经+真题解析+对应的相关笔记(很全面)

image

(4)视频学习(部分)

ps:当你觉得学不进或者累了的时候,视频是个不错的选择

在这里,最后只一句话:祝大家offer拿到手软!!

外链图片转存中…(img-XjgP36fI-1714289659424)]

(4)视频学习(部分)

ps:当你觉得学不进或者累了的时候,视频是个不错的选择

在这里,最后只一句话:祝大家offer拿到手软!!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值