ElasticSearch如何实现查询所有数据
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍"ElasticSearch如何实现查询所有数据",在日常操作中,相信很多人在ElasticSearch如何实现查询所有数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2025年02月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 Listsearch(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安全错误
数据库的锁怎样保障安全
数据库缓存技术了解
网络安全密钥隐藏
南京银行软件开发外包
数据库的模型和模式的区别
web项目服务器上部署
魅族的服务器放在哪个国家
兰州西固区网络安全
高中网络安全报手抄报
vb软件开发实践报告范文
石家庄求索网络技术有限公司
php web代理服务器
稳定外贸服务器
数据库原理与技术大学习题
财务软件开发合同模板
数据库云服务器排名
武汉信息网络安全维护介绍
信息网络技术专业大学排名
数据库应用的内存选择
浩辰软件开发的软件
新余软件开发公司
关系型数据库可用于哪些方面
斯坦福 数据库教材
互联网科技三十周年
崂山区微信小程序软件开发公司
软件开发用哪种语音
常用网络安全测试工具
国家网络安全空间战略发布
海南运营软件开发计划
小学网络安全预防实施方案
中国有多少台ipv6服务器