Java?Api實現(xiàn)Elasticsearch的滾動查詢功能
解決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", "查詢學生信息表")); shouldQuery.should().add(QueryBuilders.termQuery("description.keyword", "獲取學校訪客數(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的詳細過程
相關(guān)文章
java并發(fā)使用CountDownLatch在生產(chǎn)環(huán)境翻車剖析
這篇文章主要為大家介紹了java并發(fā)使用CountDownLatch在生產(chǎn)環(huán)境翻車的示例剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08springboot整合redis過期key監(jiān)聽實現(xiàn)訂單過期的項目實踐
現(xiàn)在各種電商平臺都有自己的訂單過期時間設(shè)置,那么如何設(shè)置訂單時間過期呢,本文主要介紹了springboot整合redis過期key監(jiān)聽實現(xiàn)訂單過期的項目實踐,感興趣的可以了解一下2023-12-12基于@RequestParam name和value屬性的區(qū)別
這篇文章主要介紹了@RequestParam name和value屬性的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08解讀java.lang.Character.isLetterOrDigit()的使用方式
這篇文章主要介紹了解讀java.lang.Character.isLetterOrDigit()的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06Java二維數(shù)組實現(xiàn)數(shù)字拼圖效果
這篇文章主要為大家詳細介紹了Java二維數(shù)組實現(xiàn)數(shù)字拼圖效果,控制臺可以對空格進行移動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07