elasticsearch相关java API(详细版)

一、业务工具类

elasticsearch查询数据的操作基本上都差不多,主要不同的是查询条件的组合。

1. 获取es连接(工具类)

 public static RestHighLevelClient getEsHighInit() {
        RestClientBuilder http = RestClient.builder(new HttpHost("192.168.248.10", 9200, "http"))
                .setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
                    @Override
                    public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
                        requestConfigBuilder.setConnectTimeout(700000);
                        requestConfigBuilder.setSocketTimeout(600000);
                        requestConfigBuilder.setConnectionRequestTimeout(100000);
                        return requestConfigBuilder;
                    }
                });
        return new RestHighLevelClient(http);
    }

2. 获取所有索引(工具类)

 public static List<Map<String, Object>> getIndex(RestHighLevelClient esHighInit) throws IOException {
        List<Map<String, Object>> resultList = new ArrayList();
        GetAliasesRequest request = new GetAliasesRequest();
        GetAliasesResponse alias = esHighInit.indices().getAlias(request, RequestOptions.DEFAULT);
        Map<String, Set<AliasMetaData>> map = alias.getAliases();
        map.forEach((k, v) -> {
            if (!k.startsWith(".")) {//忽略elasticesearch 默认的
                Map map1 = new HashMap();
                map1.put("indexName", k);
                resultList.add(map1);
            }
        });

        return resultList;
    }

3. 获取数据(工具类)

  public static Map<String, Object> getData(RestHighLevelClient restHighLevelClient, String index, SearchSourceBuilder searchSourceBuilder) throws IOException {
        Map<String, Object> result = new HashMap<>();
        List<Map<String, Object>> datas = new ArrayList<>();

        //1.创建 SearchRequest搜索请求
        SearchRequest searchRequest = new SearchRequest();

        //2.设置需要查看的索引
        if (!StringUtils.isEmpty(index)) {
            searchRequest.indices(index);//指定要查询的索引
        }

        //3.将 SearchSourceBuilder 添加到 SearchRequest中
        searchRequest.source(searchSourceBuilder);

        //4.执行查询
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        //5.解析查询结果
        SearchHits hits = searchResponse.getHits();
        for (SearchHit hit : hits) {
            Map map = new HashMap();
            map.put("index", hit.getIndex());//索引
            map.put("source", hit.getSourceAsString());//内容
            map.put("id", hit.getId());//内容
            datas.add(map);
        }

        result.put("data", datas);
        result.put("total", hits.getTotalHits().value);
        return result;
    }

4. 聚合查询数量(工具类)

   public static List<Map<String, Object>> getGroupCount(RestHighLevelClient client, String index, SearchSourceBuilder sourceBuilder) throws IOException {
        List<Map<String, Object>> result = new ArrayList<>();

        //1.创建 SearchRequest搜索请求
        SearchRequest searchRequest = new SearchRequest();

        //2.设置需要查看的索引
        if (!StringUtils.isEmpty(index)) {
            searchRequest.indices(index);//指定要查询的索引
        }

        //3.将 SearchSourceBuilder 添加到 SearchRequest中
        searchRequest.source(sourceBuilder);

        //4.执行查询
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        Terms terms = searchResponse.getAggregations().get("logCount");

        //5.解析查询结果
        List<? extends Terms.Bucket> groupBuckets = terms.getBuckets();
        for (Terms.Bucket bucket : groupBuckets) {
            Map<String, Object> data = new HashMap<>();
            String key = bucket.getKeyAsString(); // 分组的key值
            long count = bucket.getDocCount(); // 分组的日志数量
            data.put("key", key);
            data.put("count", count);
            result.add(data);
        }
        return result;
    }

5. 多字段聚合查询数量

  //*******************************分组查询,实现聚合agent.hostname并且查询数量*******************************
     //1.初始化连接
     RestHighLevelClient esHighInit = getEsHighInitCommonConn();

     //2.创建 SearchRequest搜索请求
     SearchRequest searchRequest = new SearchRequest();

     //3.设置分页和相关条件
     SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
     //返回结果不包含文档内容
     searchSourceBuilder.size(0);
     //设置聚合
     //聚合字段1
     TermsAggregationBuilder aggregationBuilder1 = AggregationBuilders.terms("group_by_field").field("application").size(10000);
     CardinalityAggregationBuilder uniqueCountBuilder1 = AggregationBuilders.cardinality("unique_count").field("application");
     aggregationBuilder1.subAggregation(uniqueCountBuilder1);
     //聚合字段2
     TermsAggregationBuilder aggregationBuilder2 = AggregationBuilders.terms("group_by_field").field("name").size(10000);
     CardinalityAggregationBuilder uniqueCountBuilder2 = AggregationBuilders.cardinality("unique_count").field("name");
     aggregationBuilder2.subAggregation(uniqueCountBuilder2);
     aggregationBuilder1.subAggregation(aggregationBuilder2);

     searchSourceBuilder.aggregation(aggregationBuilder1);

     //4.设置索引
     searchRequest.indices(".security-7");//指定要查询的索引

     //5.将 SearchSourceBuilder 添加到 SearchRequest中
     searchRequest.source(searchSourceBuilder);

     //6.执行查询
     SearchResponse searchResponse = esHighInit.search(searchRequest, RequestOptions.DEFAULT);

     //7.获取数据
     Terms terms = searchResponse.getAggregations().get("group_by_field");
     List<? extends Terms.Bucket> groupBuckets = terms.getBuckets();
     List<Map<String, Object>> datas = new ArrayList<>();
     //第一层聚合
     for (Terms.Bucket bucket : groupBuckets) {
         String application = bucket.getKeyAsString(); // 分组的key值

         //第二层聚合
         Terms terms1 =bucket.getAggregations().get("group_by_field");
         List<? extends Terms.Bucket> groupBuckets1 = terms1.getBuckets();
         for (Terms.Bucket bucket1 : groupBuckets1) {
             String name = bucket1.getKeyAsString(); // 分组的key值
             long count1 = bucket1.getDocCount(); // 分组的日志数量

             Map map=new HashMap();
             map.put("application",application);
             map.put("name",name);
             map.put("count",count1);
             datas.add(map);
         }
     }

     //8.关闭
     esHighInit.close();

6. like查询(工具类)

     //*******************************like查询,实现org*(org%)*******************************
     //1.初始化连接
     RestHighLevelClient esHighInit = getEsHighInitCommonConn();

     //2.创建 SearchRequest搜索请求
     SearchRequest searchRequest = new SearchRequest();

     //3.设置分页和相关条件
     SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
     //设置分页,默认十条
     searchSourceBuilder.from(0);
     searchSourceBuilder.size(20);
     //设置like过滤
     BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
     boolQueryBuilder.must(QueryBuilders.wildcardQuery("message.keyword", "org*"));
     searchSourceBuilder.query(boolQueryBuilder);

     //4.设置索引
     searchRequest.indices("hdfs-2023.07.18");//指定要查询的索引

     //5.将 SearchSourceBuilder 添加到 SearchRequest中
     searchRequest.source(searchSourceBuilder);

     //6.执行查询
     SearchResponse searchResponse = esHighInit.search(searchRequest, RequestOptions.DEFAULT);

     //7.获取数据
     SearchHits hits = searchResponse.getHits();
     long total=hits.getTotalHits().value;
     SearchHit[] datas=hits.getHits();

     //8.关闭
     esHighInit.close();

7. 各种业务场景构造条件查询数据与统计

   public static void main(String[] args) throws IOException {
        //=======================获取es连接=======================
        RestHighLevelClient esHighInit = getEsHighInit();


        //=======================查询所有索引=======================
//        List<Map<String, Object>> indexs = getIndex(esHighInit);


        //=======================查询某个索引底下的所有数据=======================
        //创建 SearchSourceBuilder条件构造
//        SearchSourceBuilder searchSourceBuilder1 = new SearchSourceBuilder();
//        //查找所有
//        MatchAllQueryBuilder matchAllQueryBuilder1 = QueryBuilders.matchAllQuery();
//        searchSourceBuilder1.query(matchAllQueryBuilder1);
//        List<String> messages1=matchAll(esHighInit, "index_test",searchSourceBuilder1);


        //=======================查询某个索引底下的所有数据(根据条件)=======================
//        //创建 SearchSourceBuilder条件构造
//        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//        //设置分页
//        searchSourceBuilder.from(0);
//        searchSourceBuilder.size(10);
//        //设置数据顺序
//        searchSourceBuilder.sort("count", SortOrder.ASC);
//        //指定需要返回或者排除的字段
//        String[] includes = {"count","address","age","name"};
//        String[] excludes = {};
//        searchSourceBuilder.fetchSource(includes, excludes);
//        //查找所有
//        //MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
//        //searchSourceBuilder.query(matchAllQueryBuilder);
//        //分词关键字查找
//        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("address", "天宫");
//        matchQueryBuilder.operator(Operator.OR);
//        searchSourceBuilder.query(matchQueryBuilder);
//
//        List<String> messages=matchAll(esHighInit, "index_test",searchSourceBuilder);


        //=======================查询某个索引底下的所有数据(精确查询Term)=======================
//        //创建 SearchSourceBuilder条件构造
//        SearchSourceBuilder searchSourceBuilder2 = new SearchSourceBuilder();
//        //Term查找,一般针对数字等,因为中文或者字母有些灰分分词,找不到,除非设置"index" : "not_analyzed"
//        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("count", 2);
//        searchSourceBuilder2.query(termQueryBuilder);
//        List<String> messages2=matchAll(esHighInit, "index_test",searchSourceBuilder2);


        //=======================查询某个索引底下的所有数据=======================
        //创建 SearchSourceBuilder条件构造
//        SearchSourceBuilder searchSourceBuilder1 = new SearchSourceBuilder();
//        //查找所有
//        MatchAllQueryBuilder matchAllQueryBuilder1 = QueryBuilders.matchAllQuery();
//        searchSourceBuilder1.query(matchAllQueryBuilder1);
//        List<String> messages1=matchAll(esHighInit, "index_test",searchSourceBuilder1);


        //=======================查询某个索引底下的所有数据(日期查询range)=======================
//        //创建 SearchSourceBuilder条件构造。
//        SearchSourceBuilder searchSourceBuilder3 = new SearchSourceBuilder();
//        //范围查询
//        RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("count"); //date字段
//        rangeQueryBuilder.lt(2);
//        searchSourceBuilder3.query(rangeQueryBuilder);
//        List<String> messages3 = matchAll(esHighInit, "index_test", searchSourceBuilder3);


        //=======================查询某个索引底下的所有数据(多个id查询)=======================
//        //创建 SearchSourceBuilder条件构造。
//        SearchSourceBuilder searchSourceBuilder4 = new SearchSourceBuilder();
//        //多个id 查找
//        IdsQueryBuilder idsQueryBuilder4 = QueryBuilders.idsQuery();
//        idsQueryBuilder4.addIds("15", "2", "3");
//        searchSourceBuilder4.query(idsQueryBuilder4);
//        List<String> messages3 = matchAll(esHighInit, "index_test", searchSourceBuilder4);


        //=======================查询某个索引底下的所有数据(复合查询)=======================
//        //创建 SearchSourceBuilder条件构造。
//        SearchSourceBuilder searchSourceBuilder5 = new SearchSourceBuilder();
//        //Bool查找
//        BoolQueryBuilder boolQueryBuilder5 = QueryBuilders.boolQuery();
//        // and
//        //boolQueryBuilder5.must(QueryBuilders.rangeQuery("count").gte(2));
//        //boolQueryBuilder5.must(QueryBuilders.matchQuery("address", "天"));
//        // or
//        boolQueryBuilder5.should(QueryBuilders.rangeQuery("count").gte(2));
//        boolQueryBuilder5.should(QueryBuilders.matchQuery("address", "天"));
//        searchSourceBuilder5.query(boolQueryBuilder5);
//        List<String> messages3 = matchAll(esHighInit, "index_test", searchSourceBuilder5);


        //=======================查询某个索引底下的所有数据(复合查询)=======================
//        //创建 SearchSourceBuilder条件构造。
//        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//        //Fuzzy 查找
//        FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("address", "天").fuzziness(Fuzziness.ONE);
//        searchSourceBuilder.query(fuzzyQueryBuilder);
//        List<String> messages3 = matchAll(esHighInit, "index_test", searchSourceBuilder);


        //=======================查询所有数据=======================
//        //创建 SearchSourceBuilder条件构造
//        SearchSourceBuilder searchSourceBuilder1 = new SearchSourceBuilder();
//        //设置分页,默认十条
//        searchSourceBuilder1.from(0);
//        searchSourceBuilder1.size(10);
//        //查找所有
//        MatchAllQueryBuilder matchAllQueryBuilder1 = QueryBuilders.matchAllQuery();
//        searchSourceBuilder1.query(matchAllQueryBuilder1);
//        Map<String, Object> result = matchAll(esHighInit, "", searchSourceBuilder1);


        //*******************************查询真实日志文件数据(查询业务1)*******************************
//        //创建 SearchSourceBuilder条件构造
//        SearchSourceBuilder searchSourceBuilder1 = new SearchSourceBuilder();
//        //设置分页,默认十条
//        searchSourceBuilder1.from(0);
//        searchSourceBuilder1.size(10);
//        //filter过滤查询
//        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//        boolQueryBuilder.must(QueryBuilders.rangeQuery("@timestamp").gte("2023-03-14 09:37:00").lte("2023-03-18 09:40:00").format("yyyy-MM-dd HH:mm:ss").timeZone("+08:00"));
//        boolQueryBuilder.must(QueryBuilders.matchQuery("agent.hostname", "localhost.localdomain"));
//        boolQueryBuilder.must(QueryBuilders.matchQuery("log.file.path", "/home/es/jar-log/txt.log"));
//        boolQueryBuilder.must(QueryBuilders.matchQuery("message", "error"));
//        boolQueryBuilder.must(QueryBuilders.matchQuery("fields.filetype.keyword", "jar-log"));
//        searchSourceBuilder1.postFilter(boolQueryBuilder);
//        Map<String, Object> result = getData(esHighInit, "", searchSourceBuilder1);


        //*******************************查询真实日志文件数据(查询聚合数据2)*******************************
//        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//        TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("logCount").field("fields.filetype.keyword");
//        sourceBuilder.aggregation(aggregationBuilder);
//        List<Map<String, Object>> res = getGroupCount(esHighInit, "", sourceBuilder);

        //*******************************查询真实日志文件数据(筛选条件并且聚合数据3)*******************************
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //filter过滤无效,这里只能使用query
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.must(QueryBuilders.termQuery("fields.filetype.keyword", "jar-log"));
        boolQueryBuilder.must(QueryBuilders.termQuery("log.file.path.keyword", "/home/es/jar-log/txt.log"));
        boolQueryBuilder.must(QueryBuilders.rangeQuery("@timestamp").gte("2023-03-14 09:37:00").lte("2023-03-18 09:40:00").format("yyyy-MM-dd HH:mm:ss").timeZone("+08:00"));
        searchSourceBuilder.query(boolQueryBuilder);
        //设置聚合字段
        TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("logCount").field("fields.filetype.keyword");
        searchSourceBuilder.aggregation(aggregationBuilder);
        //查询
        List<Map<String, Object>> res = getGroupCount(esHighInit, "", searchSourceBuilder);

        esHighInit.close();

    }

二、不常用工具类

1. 获取某个字段最小、最大、平均值

 public static void getdata1() throws IOException {
        RestHighLevelClient restHighLevelClient = getEsHighInit();

        //1.创建 SearchRequest搜索请求,并指定要查询的索引
        SearchRequest searchRequest = new SearchRequest("index_test");

        //2.创建 SearchSourceBuilder条件构造。
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //查询员工的最低最高和平均工资
        MaxAggregationBuilder maxAggregationBuilder = AggregationBuilders.max("maxSalary").field("count");
        MinAggregationBuilder minAggregationBuilder = AggregationBuilders.min("minSalary").field("count");
        AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("avgSalary").field("count");

        searchSourceBuilder.aggregation(maxAggregationBuilder);
        searchSourceBuilder.aggregation(minAggregationBuilder);
        searchSourceBuilder.aggregation(avgAggregationBuilder);

        //3.将 SearchSourceBuilder 添加到 SearchRequest中
        searchRequest.source(searchSourceBuilder);

        //4.执行查询
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        //5.解析查询结果
        System.out.println(searchResponse);
        System.out.println("花费的时长:" + searchResponse.getTook());

        Aggregations aggregations = searchResponse.getAggregations();
        System.out.println("aggregations:" + aggregations);
        ParsedMax maxSalary = aggregations.get("maxSalary");
        ParsedMin minSalary = aggregations.get("minSalary");
        ParsedAvg avgSalary = aggregations.get("avgSalary");
        System.out.println("maxSalary:" + maxSalary);
        System.out.println("最小" + maxSalary.getValue());
        System.out.println("最大" + minSalary.getValue());
        System.out.println("平均" + avgSalary.getValue());

    }

2. 获取某个字段最小、最大、平均值、个数、和

 public static void getdata2() throws IOException {

        RestHighLevelClient restHighLevelClient = getEsHighInit();

        //1.创建 SearchRequest搜索请求,并指定要查询的索引
        SearchRequest searchRequest = new SearchRequest("index_test");

        //2.创建 SearchSourceBuilder条件构造。
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //对salary进行统计
        StatsAggregationBuilder statsAggregationBuilder = AggregationBuilders.stats("statSalary").field("count");

        searchSourceBuilder.aggregation(statsAggregationBuilder);

        //3.将 SearchSourceBuilder 添加到 SearchRequest中
        searchRequest.source(searchSourceBuilder);

        //4.执行查询
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        //5.解析查询结果
        System.out.println("花费的时长:" + searchResponse.getTook());

        Aggregations aggregations = searchResponse.getAggregations();
        System.out.println("aggregations:" + aggregations);
        ParsedStats statSalary = aggregations.get("statSalary");
        System.out.println("统计个数" + statSalary.getCount());
        System.out.println("统计平均" + statSalary.getAvg());
        System.out.println("统计最高" + statSalary.getMaxAsString()); //可以转String
        System.out.println("统计最低" + statSalary.getMin());
        System.out.println("统计和" + statSalary.getSum());
    }

3. 搜索结果去重统计

  public static void getdata3() throws IOException {

        RestHighLevelClient restHighLevelClient = getEsHighInit();

        //1.创建 SearchRequest搜索请求,并指定要查询的索引
        SearchRequest searchRequest = new SearchRequest("index_test");

        //2.创建 SearchSourceBuilder条件构造。
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //cardinate对搜索结果去重统计
        CardinalityAggregationBuilder cardinalityAggregationBuilder = AggregationBuilders.cardinality("jobCardinate").field("count");
        searchSourceBuilder.aggregation(cardinalityAggregationBuilder);

        //3.将 SearchSourceBuilder 添加到 SearchRequest中
        searchRequest.source(searchSourceBuilder);

        //4.执行查询
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        //5.解析查询结果
        System.out.println("花费的时长:" + searchResponse.getTook());

        Aggregations aggregations = searchResponse.getAggregations();
        System.out.println("aggregations:" + aggregations);
        ParsedCardinality cardinality = aggregations.get("jobCardinate");
        System.out.println("字段:" + cardinality.getName());
        System.out.println("不重复的个数" + cardinality.getValue());
    }

4. 按照字段的 Range 分桶

 public static void getdata6() throws IOException {

        RestHighLevelClient restHighLevelClient = getEsHighInit();

        //1.创建 SearchRequest搜索请求,并指定要查询的索引
        SearchRequest searchRequest = new SearchRequest("index_test");

        //2.创建 SearchSourceBuilder条件构造。
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        // Salary Range分桶,可以自己定义 key
        RangeAggregationBuilder rangeAggregationBuilder = AggregationBuilders.range("salary_range")
                .field("count")
                .addUnboundedTo(1)
                .addRange(1, 2)
                .addUnboundedFrom(">2", 20000);
        searchSourceBuilder.aggregation(rangeAggregationBuilder);

        //3.将 SearchSourceBuilder 添加到 SearchRequest中
        searchRequest.source(searchSourceBuilder);

        //4.执行查询
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        //5.解析查询结果
        System.out.println("花费的时长:" + searchResponse.getTook());
        SearchHits hits = searchResponse.getHits();
        System.out.println("符合条件的总文档数量:" + hits.getTotalHits().value);
        //聚合信息
        Aggregations aggregations = searchResponse.getAggregations();
        System.out.println("aggregations:" + aggregations);
        ParsedRange salaryRange = aggregations.get("salary_range"); //注意类型
        System.out.println("字段:" + salaryRange.getName());
        List<? extends Range.Bucket> buckets = salaryRange.getBuckets();
        for (Range.Bucket bucket : buckets) {

            System.out.println("getKey:" + bucket.getKey());
            System.out.println("getKeyAsString:" + bucket.getKeyAsString());
            System.out.println("getDocCount:" + bucket.getDocCount());
            System.out.println("getFromAsString:" + bucket.getFromAsString());
            System.out.println("getToAsString:" + bucket.getToAsString());
        }
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch是一个基于Lucene的分布式搜索引擎,提供了丰富的API以及插件机制来支持搜索、分析和数据存储等功能。Java API是其中一种与Elasticsearch进行交互的方式,它提供了对Elasticsearch集群中的索引、文档、搜索、聚合等操作的封装。 以下是Elasticsearch 8 Java API的一些主要功能和使用方法: 1. 连接到Elasticsearch集群:可以使用`RestHighLevelClient`对象来连接到Elasticsearch集群,示例代码如下: ```java RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); ``` 2. 创建索引:可以使用`IndexRequest`对象来创建索引,示例代码如下: ```java IndexRequest request = new IndexRequest("index_name"); request.id("document_id"); request.source("field1", "value1", "field2", "value2", "field3", "value3"); IndexResponse response = client.index(request, RequestOptions.DEFAULT); ``` 3. 搜索文档:可以使用`SearchRequest`对象来搜索文档,示例代码如下: ```java SearchRequest request = new SearchRequest("index_name"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchQuery("field", "value")); request.source(sourceBuilder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); ``` 4. 聚合数据:可以使用`AggregationBuilders`对象来聚合数据,示例代码如下: ```java SearchRequest request = new SearchRequest("index_name"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.aggregation(AggregationBuilders.terms("agg_name").field("field")); request.source(sourceBuilder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); ``` 这些仅仅是Java API的一部分功能,Elasticsearch还提供了丰富的API和插件机制,以支持更多的功能和扩展。如果你需要更多关于Elasticsearch Java API的信息,可以访问官方文档 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/8.0/java-rest-high.html。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值