es工具类(自定义)

import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.ClearScrollRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequest;
import org.elasticsearch.action.support.WriteRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.CountRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.Scroll;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;

import java.io.IOException;
import java.util.*;

public class EsUtils {
    /**
     * 查询全部
     * */
    public static SearchResponse queryAll(RestHighLevelClient client,String indices,int page,int size) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.matchAllQuery());
        if (page <= 0 ) page=1;
        if ( size < 0 ) size=0;
        sourceBuilder.from((page-1)*size);
        sourceBuilder.size(size);
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 查询单条数据是否存在
     * */
    public static boolean exists(RestHighLevelClient client, String indices, GetRequest getRequest) throws IOException {
        return client.exists(getRequest, RequestOptions.DEFAULT);
    }
    /**
     * 查询满足条件的数据总条数
     * */
    public static long queryCount(RestHighLevelClient client,QueryBuilder queryBuilder,String indices) throws IOException {
        long count =0;
        CountRequest countRequest = new CountRequest();
        countRequest.query(queryBuilder);
        countRequest.indices(indices);
        count=client.count(countRequest, RequestOptions.DEFAULT).getCount();
        return count;
    }
    /**
     * 查询满足条件的数据总条数
     * */
    public static long allCount(RestHighLevelClient client,String indices) throws IOException {
        CountRequest countRequest = new CountRequest();
        countRequest.query(QueryBuilders.matchAllQuery());
        countRequest.indices(indices);
        return client.count(countRequest, RequestOptions.DEFAULT).getCount();
    }
    /**
     * 条件查询
     * */
    public static SearchResponse query(RestHighLevelClient client,String indices, SearchSourceBuilder sourceBuilder) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 条件查询 - 指定排序字段
     * */
    public static SearchResponse query(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, int page, int size, String sort) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        if (page <= 0 ) page=1;
        if ( size < 0 ) size=0;
        sourceBuilder.from((page - 1) * size);
        sourceBuilder.size(size);
        if (StringUtils.isNotBlank(sort)) {
            sourceBuilder.sort(sort, SortOrder.DESC);
        }
        sourceBuilder.query(queryBuilder);
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 条件查询 - 指定分页
     * */
    public static SearchResponse query(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, int page, int size) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        if (page <= 0 ) page=1;
        if ( size < 0 ) size=0;
        sourceBuilder.from((page - 1) * size);
        sourceBuilder.size(size);
        sourceBuilder.query(queryBuilder);
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 条件查询- 配置排除/返回指定字段
     * */
    public static SearchResponse query(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, String[] excludes,String[] includes,int page, int size) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        if (page <= 0 ) page=1;
        if ( size < 0 ) size=0;
        sourceBuilder.from((page - 1) * size);
        sourceBuilder.size(size);
        sourceBuilder.query(queryBuilder);
        sourceBuilder.fetchSource(includes,excludes);
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 条件查询- 配置排除/返回指定字段
     * */
    public static SearchResponse query(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, String exclude,String include,int page, int size) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        if (page <= 0 ) page=1;
        if ( size < 0 ) size=0;
        sourceBuilder.from((page - 1) * size);
        sourceBuilder.size(size);
        sourceBuilder.query(queryBuilder);
        sourceBuilder.fetchSource(new String[]{include},new String[]{exclude});
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 条件查询- 配置排除指定字段带分页
     * */
    public static SearchResponse queryExcludeField(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, String[] excludes,int page, int size) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        if (page <= 0 ) page=1;
        if ( size < 0 ) size=0;
        sourceBuilder.from((page - 1) * size);
        sourceBuilder.size(size);
        sourceBuilder.query(queryBuilder);
        sourceBuilder.fetchSource(new String[]{""},excludes);
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 条件查询- 配置排除指定字段
     * */
    public static SearchResponse queryExcludeField(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, String... excludes) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(queryBuilder);
        sourceBuilder.fetchSource(new String[]{""},excludes);
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 条件查询- 配置返回指定字段带分页
     * */
    public static SearchResponse queryIncludeField(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, String[] includes,int page, int size) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        if (page <= 0 ) page=1;
        if ( size < 0 ) size=0;
        sourceBuilder.from((page - 1) * size);
        sourceBuilder.size(size);
        sourceBuilder.query(queryBuilder);
        sourceBuilder.fetchSource(includes,new String[]{""});
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 条件查询- 配置返回指定字段
     * */
    public static SearchResponse queryIncludeField(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, String... includes) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(queryBuilder);
        sourceBuilder.fetchSource(includes,new String[]{""});
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 查询满足条件的数据并设置排序规则。
     * */
    public static SearchResponse queryAndSort(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, int page, int size, String sort, SortOrder order) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        if (page <= 0 ) page=1;
        if ( size < 0 ) size=0;
        sourceBuilder.from((page - 1) * size);
        sourceBuilder.size(size);
        sourceBuilder.sort(sort, order);
        sourceBuilder.query(queryBuilder);
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 自定义聚合查询
     * */
    public static SearchResponse aggQuery(RestHighLevelClient client, String indices, QueryBuilder queryBuilder, AggregationBuilder aggregationBuilder) throws IOException {
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.size(0);
        sourceBuilder.query(queryBuilder);
        sourceBuilder.aggregation(aggregationBuilder);
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
    /**
     * 单字段聚合查询
     * */
    public static Map<String, Long> aggOneArgs(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, String args1, int size) throws IOException {
        Map<String, Long> map = null;
        map = new HashMap<>();
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.size(0);
        sourceBuilder.query(queryBuilder);
        TermsAggregationBuilder agg1 = AggregationBuilders.terms(args1).field(args1 + ".keyword").size(size);
        sourceBuilder.aggregation(agg1);
        request.source(sourceBuilder);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        Terms terms = response.getAggregations().get(args1);
        for (Terms.Bucket bucket : terms.getBuckets()) {
            map.put(bucket.getKeyAsString(), bucket.getDocCount());
        }
        return map;
    }
    /**
     * 两个字段聚合查询
     * */
    public static Map<String, Map<String, Long>> aggTwoArgs(RestHighLevelClient client,String indices, QueryBuilder queryBuilder, String args1, String args2, int size) throws IOException {
        Map<String, Map<String, Long>> map = null;
        map = new HashMap<>();
        SearchRequest request = new SearchRequest().indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.size(0);
        sourceBuilder.query(queryBuilder);
        TermsAggregationBuilder agg1 = AggregationBuilders.terms(args1).field(args1 + ".keyword").size(size);
        TermsAggregationBuilder agg2 = AggregationBuilders.terms(args2).field(args2 + ".keyword").size(size);
        agg1.subAggregation(agg2);
        sourceBuilder.aggregation(agg1);
        request.source(sourceBuilder);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        Aggregations aggregations = response.getAggregations();
        Terms terms1 = aggregations.get(args1);
        for (Terms.Bucket bucket1 : terms1.getBuckets()) {
            Terms terms2 = bucket1.getAggregations().get(args2);
            Map<String, Long> map1 = new HashMap<>();
            for (Terms.Bucket bucket2 : terms2.getBuckets()) {
                map1.put(bucket2.getKeyAsString(), bucket2.getDocCount());
            }
            map.put(bucket1.getKeyAsString(), map1);
        }
        return map;

    }

    /**
     * 滚动查询带条件
     **/
    public static Map<String,Object> scrollQuery(RestHighLevelClient client,String indices,QueryBuilder queryBuilder,String[] excludes,String[] includes,int num) throws IOException {
        ArrayList<String> strings = new ArrayList<>();
        HashMap<String, Object> dataMap = new HashMap<>();
        SearchRequest searchRequest = new SearchRequest(indices);
        Scroll scroll = new Scroll(TimeValue.timeValueMinutes(5L));
        searchRequest.scroll(scroll);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        searchSourceBuilder.query(queryBuilder);
        searchSourceBuilder.size(num);

        if (null == includes) includes = new String[]{""};
        if (null == excludes) excludes = new String[]{""};
        searchSourceBuilder.fetchSource(includes,excludes);

        searchRequest.source(searchSourceBuilder);
        SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
        String scrollId = response.getScrollId();
        SearchHit[] hits = response.getInternalResponse().hits().getHits();

        for (SearchHit searchHit : hits) {
            strings.add(searchHit.getSourceAsString());
        }
        dataMap.put("scroll",scrollId);
        dataMap.put("data",strings);
        return dataMap;
    }
    /**
     * 请求上免得scrollQuery或者scrollQueryAll方法后,之后的每次查询都请求这个scrollQuery方法
     * */
    public static List<String> scrollQuery(RestHighLevelClient client, String scrollId) throws IOException {
        ArrayList<String> strings = new ArrayList<>();
        Scroll scroll = new Scroll(TimeValue.timeValueMinutes(5L));
        SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
        scrollRequest.scroll(scroll);
        SearchResponse response = client.scroll(scrollRequest, RequestOptions.DEFAULT);
        SearchHit[] hits = response.getHits().getHits();
        for (SearchHit searchHit : hits) {
            strings.add(searchHit.getSourceAsString());
        }
        return strings;
    }
    /**
     * 清除scroll_id
     * */
    public static boolean clearScrollIds(RestHighLevelClient client,String... scrollIds){
        List<String> sIds = new ArrayList<>();
        for (String scrollId : scrollIds) {
            sIds.add(scrollId);
        }
        ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
        //添加单个id
        clearScrollRequest.addScrollId("滚动id");
        //添加多个id
        clearScrollRequest.setScrollIds(sIds);
        try {
            client.clearScroll(clearScrollRequest,RequestOptions.DEFAULT);
            return true;
        } catch (IOException e) {
            return false;
        }

    }
    /**
     * search after查询
     * @return
     * 返回值中key为 data的数据,value是 ArrayList<String>类型
     * 返回值中key为 sort_id的数据,value是 Object[] 类型
     * */
    public static Map<String,Object> searchAfterQuery(RestHighLevelClient client,String indices,SearchSourceBuilder searchSourceBuilder) throws IOException {
        HashMap<String, Object> hashMap = new HashMap<>();
        ArrayList<String> data = new ArrayList<>();
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices(indices);
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHit[] hits = search.getHits().getHits();
        Object[] sortValues=new Object[0];
        if (hits.length>0){
            sortValues = hits[hits.length - 1].getSortValues();
        }
        for (SearchHit hit : hits) {
            data.add(hit.getSourceAsString());
        }
        hashMap.put("data",data);
        hashMap.put("sortId",sortValues);
        return hashMap;
    }
    /**
     * search after查询
     * @return
     * 返回值中key为 data的数据,value是 ArrayList<String>类型
     * 返回值中key为 sort_id的数据,value是 Object[] 类型
     * */
    public static Map<String,Object> searchAfterQuery(RestHighLevelClient client,SearchRequest searchRequest) throws IOException {
        HashMap<String, Object> hashMap = new HashMap<>();
        ArrayList<String> data = new ArrayList<>();
        SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHit[] hits = search.getHits().getHits();
        Object[] sortValues=new Object[0];
        if (hits.length>0){
            sortValues = hits[hits.length - 1].getSortValues();
        }
        for (SearchHit hit : hits) {
            data.add(hit.getSourceAsString());
        }
        hashMap.put("data",data);
        hashMap.put("sortId",sortValues);
        return hashMap;
    }
    /**
     * search after查询
     * @return
     * 返回值中key为 data的数据,value是 ArrayList<String>类型
     * 返回值中key为 sort_id的数据,value是 Object[] 类型
     * */
    public static Map<String,Object> searchAfterQuery(RestHighLevelClient client,String indices,QueryBuilder queryBuilder,int size,String sort,SortOrder order) throws IOException {
        HashMap<String, Object> hashMap = new HashMap<>();
        ArrayList<String> data = new ArrayList<>();
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices(indices);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.from(0).size(size).sort(sort,order).query(queryBuilder);
        searchRequest.source(sourceBuilder);
        sourceBuilder.trackTotalHits(true);
        SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
        SearchHit[] hits = search.getHits().getHits();
        Object[] sortValues=new Object[0];
        if (hits.length>0){
            sortValues = hits[hits.length - 1].getSortValues();
        }
        for (SearchHit hit : hits) {
            data.add(hit.getSourceAsString());
        }
        hashMap.put("data",data);
        hashMap.put("sortId",sortValues);
        return hashMap;
    }
    /**
     * 插入数据。json格式。
     * */
    public static void insertData(RestHighLevelClient client,String indices,String id,String data) throws IOException {
        IndexRequest indexRequest = new IndexRequest();
        indexRequest.index(indices).id(id).source(data, XContentType.JSON);
        client.index(indexRequest,RequestOptions.DEFAULT);
    }
    /**
     * 删除指定索引
     * */
    public static boolean deleteIndex(RestHighLevelClient client,String indices) throws IOException {
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(indices);
        deleteIndexRequest.timeout(TimeValue.timeValueMinutes(2));
        AcknowledgedResponse delete = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
        return delete.isAcknowledged();
    }

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值