ElasticSearch如何实现查询所有数据
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要介绍"ElasticSearch如何实现查询所有数据",在日常操作中,相信很多人在ElasticSearch如何实现查询所有数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2025年12月01日ElasticSearch如何实现查询所有数据
这篇文章主要介绍"ElasticSearch如何实现查询所有数据",在日常操作中,相信很多人在ElasticSearch如何实现查询所有数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ElasticSearch如何实现查询所有数据"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1,分页查询所有,但最多能查10000 条记录,超过就会报错
publicList getAll(String index, String type, QueryBuilder queryBuilder, Class tClass) { SearchResponse searchResponse = buildRequest(index, type, queryBuilder, 0).get(); SearchHits hits = searchResponse.getHits(); int total = (int) hits.totalHits; List result = new ArrayList<>(total); addToResult(hits,result,tClass); int pagesize = 1000; int page = total / pagesize; if(total % pagesize != 0){ page++; } for (int i = 2; i <= page; i++) { int from = (i - 1) * pagesize; searchResponse = buildRequest(index, type, queryBuilder, from).get(); hits = searchResponse.getHits(); addToResult(hits,result,tClass); } return result; } private SearchRequestBuilder buildRequest(String index,String type,QueryBuilder queryBuilder,int from) { TransportClient client = elasticSearchManager.getClient("ad"); int pagesize = 1000; SearchRequestBuilder builder = client .prepareSearch(index) .setTypes(type) .setFrom(from) .setSize(pagesize) .setQuery(queryBuilder); log.info("ElasticsearchDAO query string:\nGET {}/{}/_search\n{} ", index, type, builder.toString()); return builder; }
2,利用scroll,这是官方推荐的方式
import lombok.extern.slf4j.Slf4j;import org.elasticsearch.action.search.SearchRequestBuilder;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.unit.TimeValue;import org.elasticsearch.index.query.BoolQueryBuilder;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.SearchHit;import org.elasticsearch.search.SearchHits;import org.elasticsearch.search.aggregations.Aggregation;import org.elasticsearch.search.aggregations.AggregationBuilder;import org.elasticsearch.search.aggregations.Aggregations;import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation;import org.elasticsearch.search.aggregations.bucket.terms.Terms;import org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.util.CollectionUtils;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.concurrent.ExecutionException;@Slf4j@Componentpublic class ElasticsearchDAO { @Autowired private ElasticSearchManager elasticSearchManager; private int pagesize = 10000; /** * es 游标有效期 */ private final int ES_SCROLL_TIME = 10; public List search(SearchRequest req) throws ExecutionException, InterruptedException { BoolQueryBuilder boolQuery = req.getQueryBuilder(); List result = getAll(Config.ES_REPORT_INDEX, Config.ES_REPORT_TYPE, boolQuery,ReportDO.class); return result; } /** * 查询所有 */ private List getAll(String index, String type, QueryBuilder queryBuilder, Class tClass) throws ExecutionException, InterruptedException { SearchResponse searchResponse = buildRequest(index, type, queryBuilder).get(); String scrollId = searchResponse.getScrollId(); SearchHits hits = searchResponse.getHits(); List result = new ArrayList<>(); addToResult(hits,result,tClass); while (true){ List list = getScrollResult(scrollId, tClass, result); if(list == null){ break; } } return result; } private List getScrollResult(String scrollId,Class tClass, List result) throws ExecutionException, InterruptedException { TransportClient client = elasticSearchManager.getClient("ad"); SearchResponse searchResponse = client.prepareSearchScroll(scrollId) //设置游标 .setScroll(TimeValue.timeValueSeconds(ES_SCROLL_TIME)) //设置游标有效期 .execute() .get(); SearchHits hits = searchResponse.getHits(); SearchHit[] searchHits = hits.getHits(); if(searchHits == null || searchHits.length == 0){ return null; } addToResult(hits,result,tClass); return result; } private SearchRequestBuilder buildRequest(String index,String type,QueryBuilder queryBuilder) { TransportClient client = elasticSearchManager.getClient("ad"); SearchRequestBuilder builder = client .prepareSearch(index) .setTypes(type) .setScroll(TimeValue.timeValueSeconds(ES_SCROLL_TIME)) //设置游标有效期 .setSize(pagesize) .setQuery(queryBuilder); log.info("ElasticsearchDAO query string:\nGET {}/{}/_search\n{} ", index, type, builder.toString()); return builder; } private void addToResult(SearchHits hits,List result,Class tClass){ for (SearchHit hit : hits) { String sourceAsString = hit.getSourceAsString(); Object object = JsonUtil.parseObject(sourceAsString, tClass); result.add(object); } }} 到此,关于"ElasticSearch如何实现查询所有数据"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
查询
数据
游标
学习
有效
有效期
更多
帮助
实用
接下来
官方
文章
方式
方法
理论
知识
篇文章
网站
资料
跟着
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
dnf数据库含义
亚马逊用哪个服务器稳定
网络安全有学习
网络安全工程师平常做什么
mc我的世界服务器被炸
网络安全作文80
软件开发中的评审案例
油墨数据库颜色配方
疫情防控与网络安全教育黑板报
德兴网络安全检查网站
浙江省公安厅网络安全总队
win10基础软件开发
成武员工诚信积分管理软件开发
国家网络安全基础知识考试题
成都思安网络技术有限公司
计算机网络技术 期中试题
大型软件开发培训
厦门法硕互联网科技有限公司
代码怎么实现连上数据库
有哪些数据库工具
马桶c玩过的服务器
服务器一下通一下不通
三维智能网络安全
苏州定制软件开发代码
华为网络技术考试
文明与征服服务器什么时候开
2022年电影票房数据库
数据库不同用户之间同步数据
网络安全最简单的手绘画
青岛卓尔软件开发有限公司官网