Elasticsearch Java API(十一)--聚合(aggregations)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch分析聚合介绍了分析聚合的REST命令,这篇博客介绍一下如何使用Java API。一、准备数据测试数据请参考我的上一篇博客:Elasticsearch分析聚合。

Elasticsearch分析聚合介绍了分析聚合的REST命令,这篇博客介绍一下如何使用Java API。

一、准备数据

测试数据请参考我的上一篇博客:Elasticsearch分析聚合

二、需求

查询title中包含关键字”程序”的文档,统计查询按编程语言分组,统计每组的文档数量。

三、REST命令行

REST命令行如下,有三部分,query查询所有title中包含关键词程序的文档,size指定返回结果中文档数量,其值为0只返回聚合的结果,aggs部分通过language字段进行分组。

GET books/_search
{
    "query": {
        "match": {
            "title": "程序" 
        }
    },
    "size": 0,
    "aggs": {
        "per_count": {
            "terms": {
                "field": "language"
            }
        }
    }
}

查询结果如下:

{
   "took": 5,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 2,
      "max_score": 0,
      "hits": []
   },
   "aggregations": {
      "per_count": {
         "doc_count_error_upper_bound": 0,
         "sum_other_doc_count": 0,
         "buckets": [
            {
               "key": "java",
               "doc_count": 1
            },
            {
               "key": "javascript",
               "doc_count": 1
            }
         ]
      }
   }
}

四、聚合的JAVA API

        //创建TransportClient对象
        client=EsUtils.getEsClient();
        QueryBuilder matchQuery = QueryBuilders.matchQuery("title", "程序");
        AbstractAggregationBuilder aggregation = AggregationBuilders.terms("per_count").field("language");
        SearchResponse response = client.prepareSearch("books").setTypes("IT")
        .setQuery(matchQuery)
        .addAggregation(aggregation)
        .execute()
        .actionGet();
        SearchHits hits = response.getHits();
        for(SearchHit hit:hits){
            System.out.println("id:"+hit.getId()+"\ttitle:"+hit.getSource().get("title"));
        }
        Terms terms = response.getAggregations().get("per_count");
        List<Bucket> buckets = terms.getBuckets();
        for(Bucket bucket:buckets){
            System.out.println(bucket.getKey()+"----"+bucket.getDocCount());
        }
        client.close();

运行结果:

id:2    title:Java程序性能优化
id:5    title:JavaScript高级程序设计
java----1
javascript----1

五、更多聚合操作

Bucket aggregations

Metrics aggregations

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
13天前
|
存储 人工智能 自然语言处理
Elasticsearch Inference API增加对阿里云AI的支持
本文将介绍如何在 Elasticsearch 中设置和使用阿里云的文本生成、重排序、稀疏向量和稠密向量服务,提升搜索相关性。
59 14
Elasticsearch Inference API增加对阿里云AI的支持
|
2天前
|
存储 SQL 监控
|
1天前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
14 4
|
10天前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。
|
16天前
|
Java 大数据 API
别死脑筋,赶紧学起来!Java之Steam() API 常用方法使用,让开发简单起来!
分享Java Stream API的常用方法,让开发更简单。涵盖filter、map、sorted等操作,提高代码效率与可读性。关注公众号,了解更多技术内容。
|
30天前
|
存储 Java API
如何使用 Java 中的 API 更改 PDF 纸张大小
如何使用 Java 中的 API 更改 PDF 纸张大小
38 11
|
30天前
|
机器学习/深度学习 算法 Java
通过 Java Vector API 利用 SIMD 的强大功能
通过 Java Vector API 利用 SIMD 的强大功能
36 10
|
29天前
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
25 1
|
2月前
|
安全 Java API
时间日期API(Date,SimpleDateFormat,Calendar)+java8新增日期API (LocalTime,LocalDate,LocalDateTime)
这篇文章介绍了Java中处理日期和时间的API,包括旧的日期API(Date、SimpleDateFormat、Calendar)和Java 8引入的新日期API(LocalTime、LocalDate、LocalDateTime)。文章详细解释了这些类/接口的方法和用途,并通过代码示例展示了如何使用它们。此外,还讨论了新旧API的区别,新API的不可变性和线程安全性,以及它们提供的操作日期时间的灵活性和简洁性。
|
23天前
|
SQL Java API
深入探索Java的持久化技术——JPA(Java Persistence API)
【10月更文挑战第10天】深入探索Java的持久化技术——JPA(Java Persistence API)
15 0