Java?Api實(shí)現(xiàn)Elasticsearch的滾動(dòng)查詢功能
解決ES每次只能查詢一萬(wàn)條數(shù)據(jù)的問(wèn)題
@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();
//對(duì)結(jié)果集處理
List<FunctionLogElasticEntity> functionLogs = ESUtil.convertToFunctionLog(searchHits);
visitorsResultHandle(functionLogs, esHandleDtos, ESUtil.isMoreThanMonth(startTime, endTime));
//滾動(dòng)查詢部分,將從第10001筆數(shù)據(jù)開(kāi)始
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();
//對(duì)結(jié)果集處理
functionLogs = ESUtil.convertToFunctionLog(searchHits);
visitorsResultHandle(functionLogs, esHandleDtos, ESUtil.isMoreThanMonth(startTime, endTime));
}
//清除滾動(dòng),否則影響下次查詢
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實(shí)現(xiàn)Elasticsearch的滾動(dòng)查詢的文章就介紹到這了,更多相關(guān)Java Elasticsearch滾動(dòng)查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java查詢Elasticsearch數(shù)據(jù)根據(jù)指定id檢索(in查詢)、sql權(quán)限過(guò)濾、多字段匹配檢索及數(shù)據(jù)排序
- Java使用ES?Client?調(diào)用滾動(dòng)查詢及Elasticsearch滾動(dòng)查詢Scrolling機(jī)制
- Java利用ElasticSearch實(shí)現(xiàn)自動(dòng)補(bǔ)全功能
- Java+ElasticSearch+Pytorch實(shí)現(xiàn)以圖搜圖功能
- Java中Elasticsearch 實(shí)現(xiàn)分頁(yè)方式(三種方式)
- 關(guān)于Java中配置ElasticSearch集群環(huán)境賬號(hào)密碼的問(wèn)題
- Java如何使用elasticsearch進(jìn)行模糊查詢
- JAVA使用ElasticSearch查詢in和not in的實(shí)現(xiàn)方式
- JAVA操作elastic?search的詳細(xì)過(guò)程
相關(guān)文章
java并發(fā)使用CountDownLatch在生產(chǎn)環(huán)境翻車剖析
這篇文章主要為大家介紹了java并發(fā)使用CountDownLatch在生產(chǎn)環(huán)境翻車的示例剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
微服務(wù)框架FEIGN使用常見(jiàn)問(wèn)題分析
這篇文章主要為大家介紹了微服務(wù)框架FEIGN常見(jiàn)問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
springboot整合redis過(guò)期key監(jiān)聽(tīng)實(shí)現(xiàn)訂單過(guò)期的項(xiàng)目實(shí)踐
現(xiàn)在各種電商平臺(tái)都有自己的訂單過(guò)期時(shí)間設(shè)置,那么如何設(shè)置訂單時(shí)間過(guò)期呢,本文主要介紹了springboot整合redis過(guò)期key監(jiān)聽(tīng)實(shí)現(xiàn)訂單過(guò)期的項(xiàng)目實(shí)踐,感興趣的可以了解一下2023-12-12
基于@RequestParam name和value屬性的區(qū)別
這篇文章主要介紹了@RequestParam name和value屬性的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
解讀java.lang.Character.isLetterOrDigit()的使用方式
這篇文章主要介紹了解讀java.lang.Character.isLetterOrDigit()的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
springboot實(shí)現(xiàn)文件上傳步驟解析
這篇文章主要介紹了springboot實(shí)現(xiàn)文件上傳步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Java二維數(shù)組實(shí)現(xiàn)數(shù)字拼圖效果
這篇文章主要為大家詳細(xì)介紹了Java二維數(shù)組實(shí)現(xiàn)數(shù)字拼圖效果,控制臺(tái)可以對(duì)空格進(jìn)行移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
淺談springioc實(shí)例化bean的三個(gè)方法
下面小編就為大家?guī)?lái)一篇淺談springioc實(shí)例化bean的三個(gè)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就想給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09

