关闭

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

标签: elasticsearch聚合aggsjavaapi
4603人阅读 评论(0) 收藏 举报
分类:

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

1
0
查看评论

elasticsearch2.3.3 基本操作

elasticsearch2.3.3 随机数据 聚合
  • ishangxinyu
  • ishangxinyu
  • 2016-10-24 20:54
  • 270

ElasticSearch java API - 聚合查询

Elastic Search Java API 各种聚合(Aggregation)查询的实现
  • carlislelee
  • carlislelee
  • 2016-09-20 17:20
  • 9199

Elasticsearch过滤与聚合的先后顺序java实现

Elasticsearch的聚合结果是先过滤或者搜索后聚合,那么如果我们想要先聚合,然后对结果进行再一次的过滤或者搜索应该如何实现呢,在此给出简单的java实现demo
  • molong1208
  • molong1208
  • 2016-01-26 21:10
  • 25452

实时搜索引擎Elasticsearch(4)——Aggregations (聚合)API的使用

本篇将介绍ES提供的聚合API的使用。ES提供的聚合功能可以用来进行简单的数据分析。本文仍然以上一篇提供的数据为例来讲解。
  • xialei199023
  • xialei199023
  • 2015-09-08 21:57
  • 25628

Elasticsearch Java API 的使用(12)—度量聚合之一

度量聚合从文档中提取出来的值并进行计算。这些值通常从文档中的字段(使用数据字段)中提取出来,单也可以使用脚本进行计算。 数字型度量聚合是一种特殊类型的度量聚合,输出数字型的值。聚合输出一个数字指标(例如平均值聚合)称之为单值数字型度量聚合,产生多个指标值(例如统计聚合)称之为多值数字型度量聚合。当...
  • zx711166
  • zx711166
  • 2017-11-22 14:38
  • 333

Elasticsearch java API (17)Aggregations 聚合 函数

指标聚合编辑 分钟聚合编辑 下面是如何使用 Min Aggregation 与Java API。 准备聚合请求编辑 这里有一个例子关于如何创建聚合的要求:MetricsAggregationBuilder aggregation = ...
  • u012116196
  • u012116196
  • 2016-06-30 11:58
  • 11660

ElasticSearch之Java Api聚合分组实战

转自:http://qindongliang.iteye.com/blog/2289590#rd 最近有个日志收集监控的项目采用的技术栈是ELK+JAVA+Spring,客户端语言使用的是Java,以后有机会的话可以试一下JavaScript+Nodejs的方式,非常轻量级的组合,只不过不太适合服务...
  • ASIA_kobe
  • ASIA_kobe
  • 2016-05-11 19:39
  • 16473

使用Java实现Elasticsearch的分组功能

ES上有如下数据 如果想根据class对student进行分组 GET school/student/_search?search_type=count { "aggs": { "class": { "terms": { ...
  • lom9357bye
  • lom9357bye
  • 2016-11-27 20:27
  • 4714

Elasticsearch5.3 JAVA Demo 聚合查询

直接上代码:小弟写的不是特别清晰!也不是特别的完整!希望大神们不要介意!谢谢! package com.vdyoo.paas.answerservice.search.es.esquery; import org.elasticsearch.action.search.SearchReque...
  • Mrswon
  • Mrswon
  • 2017-07-03 20:13
  • 1933

Elasticsearch 5.x Java api Aggregations(聚合)

Ealsticsearch 5.x Java API聚合string 类型的时候,会报错(json的错),则需要在聚合的string类型字段的后面添加 .keyword , 虽然使用watch查看聚合的es json的时候会出现以下报错,但是不会影响结果。 { "error&quo...
  • it_lihongmin
  • it_lihongmin
  • 2017-11-04 23:18
  • 701
    《从Lucene到Elasticsearch:全文检索实战》
    Lucene、ES、ELK开发交流群:370734940
    Lucene、ES、ELK开发交流
    个人资料
    • 访问:935621次
    • 积分:9244
    • 等级:
    • 排名:第2379名
    • 原创:209篇
    • 转载:2篇
    • 译文:6篇
    • 评论:468条
    StackOverFlow
    http://stackoverflow.com/users/6526424
    统计
    博客专栏
    文章分类
    最新评论