Java?Api實現(xiàn)Elasticsearch的滾動查詢功能
更新時間:2023年08月14日 10:25:50 作者:Cimbala
這篇文章主要介紹了Java?Api實現(xiàn)Elasticsearch的滾動查詢,解決ES每次只能查詢一萬條數(shù)據(jù)的問題,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
解決ES每次只能查詢一萬條數(shù)據(jù)的問題
@Override
public List<ESHandleDto> getVisitorsNum(String startTime, String endTime, String schoolName, String typeFunction) throws IOException {
List<ESHandleDto> esHandleDtos = new ArrayList<>();
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(ElasticEnum.FUNCTIONLOG_INDEX.getValue());
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if (StringUtils.hasText(schoolName)) {
boolQueryBuilder.must(QueryBuilders.termQuery("schoolName.keyword", schoolName));
}
if (StringUtils.hasText(typeFunction)) {
boolQueryBuilder.must(QueryBuilders.termQuery("typeFunction.keyword", typeFunction));
}
if (StringUtils.hasText(startTime) && StringUtils.hasText(endTime)) {
boolQueryBuilder.must(QueryBuilders.rangeQuery("createDate").gte(startTime + "T00:00:00.000Z").lte(endTime + "T23:59:59.000Z"));
}
BoolQueryBuilder shouldQuery = QueryBuilders.boolQuery();
shouldQuery.should().add(QueryBuilders.termQuery("description.keyword", "查詢學(xué)生信息表"));
shouldQuery.should().add(QueryBuilders.termQuery("description.keyword", "獲取學(xué)校訪客數(shù)據(jù)"));
boolQueryBuilder.must(shouldQuery);
sourceBuilder.sort("_doc", SortOrder.DESC);
sourceBuilder.size(10000);
sourceBuilder.query(boolQueryBuilder);
searchRequest.scroll(TimeValue.timeValueMinutes(1));
searchRequest.source(sourceBuilder);
// System.out.println(sourceBuilder.toString());
SearchResponse searchResponse = null;
try {
searchResponse = esConfig.restHighLevelClient().search(searchRequest, RequestOptions.DEFAULT);
} catch (Throwable e) {
throw new RuntimeException(e);
}
scrollHandle(searchResponse, esConfig, esHandleDtos, startTime, endTime);
return esHandleDtos;
}
public static void scrollHandle(SearchResponse searchResponse, ESConfig esConfig, List<ESHandleDto> esHandleDtos, String startTime, String endTime) {
SearchHits hits = searchResponse.getHits();
String scrollId = searchResponse.getScrollId();
SearchHit[] searchHits = hits.getHits();
//對結(jié)果集處理
List<FunctionLogElasticEntity> functionLogs = ESUtil.convertToFunctionLog(searchHits);
visitorsResultHandle(functionLogs, esHandleDtos, ESUtil.isMoreThanMonth(startTime, endTime));
//滾動查詢部分,將從第10001筆數(shù)據(jù)開始
while (searchHits != null && searchHits.length > 0) {
SearchScrollRequest searchScrollRequest = new SearchScrollRequest(scrollId);
searchScrollRequest.scroll(TimeValue.timeValueMinutes(1));
try {
searchResponse = esConfig.restHighLevelClient().scroll(searchScrollRequest, RequestOptions.DEFAULT);
} catch (Throwable e) {
throw new RuntimeException(e);
}
scrollId = searchResponse.getScrollId();
hits = searchResponse.getHits();
searchHits = hits.getHits();
//對結(jié)果集處理
functionLogs = ESUtil.convertToFunctionLog(searchHits);
visitorsResultHandle(functionLogs, esHandleDtos, ESUtil.isMoreThanMonth(startTime, endTime));
}
//清除滾動,否則影響下次查詢
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
ClearScrollResponse clearScrollResponse = null;
try {
clearScrollResponse = esConfig.restHighLevelClient().clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
throw new RuntimeException(e);
}
boolean succeeded = clearScrollResponse.isSucceeded();
System.out.println(succeeded);
}到此這篇關(guān)于Java Api實現(xiàn)Elasticsearch的滾動查詢的文章就介紹到這了,更多相關(guān)Java Elasticsearch滾動查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
- Java查詢Elasticsearch數(shù)據(jù)根據(jù)指定id檢索(in查詢)、sql權(quán)限過濾、多字段匹配檢索及數(shù)據(jù)排序
- Java使用ES?Client?調(diào)用滾動查詢及Elasticsearch滾動查詢Scrolling機制
- Java利用ElasticSearch實現(xiàn)自動補全功能
- Java+ElasticSearch+Pytorch實現(xiàn)以圖搜圖功能
- Java中Elasticsearch 實現(xiàn)分頁方式(三種方式)
- 關(guān)于Java中配置ElasticSearch集群環(huán)境賬號密碼的問題
- Java如何使用elasticsearch進行模糊查詢
- JAVA使用ElasticSearch查詢in和not in的實現(xiàn)方式
- JAVA操作elastic?search的詳細(xì)過程
相關(guān)文章
Java使用Redis實現(xiàn)消息訂閱/發(fā)布的幾種方式
Redis 提供了 Pub/Sub (發(fā)布/訂閱) 模式,允許客戶端訂閱頻道并接收發(fā)布到這些頻道的消息,以下是 Java 中使用 Redis 實現(xiàn)消息訂閱的幾種方式,需要的朋友可以參考下2025-08-08
SpringBoot整合Gson 整合Fastjson的實例詳解
這篇文章主要介紹了SpringBoot整合Gson 整合Fastjson的實例詳解,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
SpringBoot創(chuàng)建定時任務(wù)的示例詳解
在Spring Boot中創(chuàng)建定時任務(wù),通常使用@Scheduled注解,這是Spring框架提供的一個功能,允許你按照固定的頻率(如每天、每小時、每分鐘等)執(zhí)行某個方法,本文給大家介紹了SpringBoot創(chuàng)建定時任務(wù)的示例,需要的朋友可以參考下2024-04-04
解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry
這篇文章主要介紹了解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry:問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12

