ElasticSearch如何实现查询所有数据
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"ElasticSearch如何实现查询所有数据",在日常操作中,相信很多人在ElasticSearch如何实现查询所有数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
手冲咖啡和咖啡机区别
科技和互联网公司
互联网科技会
华宇互联网科技
互联网科技公司电话
亿账通互联网科技
滨湖区互联网智能科技产品供应
彤创互联网科技有限公司
迪庆互联网科技招生
东莞新华互联网科技学校
小米互联网科技园入驻
东营紫格互联网科技
扫呗互联网科技有限公司
福仕德教育科技互联网
广州三三互联网科技有限公司
马化腾互联网科技教学
数字互联网科技有限公司
亚光科技低轨卫星互联网
科技互联网企业在行动
科技发展第三阶段互联网时代
万易互联网科技有限公司
互联网科技革命
互联网 科技馆
互联网科技产品
承德科技产业互联网发展
互联网系的金融科技公司
顶级互联网科技成果有哪些
群盈汇互联网科技有限公司
宁波跨境商互联网科技有限公司
互联网时代科技型公司的机会