这段日子在搞 springdata 操作 elasticsearch 其中使用聚合操作,特此一记:

下面是https://github.com/spring-projects/spring-data-elasticsearch/tree/5.x 的spring-data-elasticsearch 项目的:ElasticsearchTemplateAggregationTests代码:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:elasticsearch-template-test.xml")
public class ElasticsearchTemplateAggregationTests {public static final String RIZWAN_IDREES = "Rizwan Idrees";public static final String MOHSIN_HUSEN = "Mohsin Husen";public static final String JONATHAN_YAN = "Jonathan Yan";public static final String ARTUR_KONCZAK = "Artur Konczak";public static final int YEAR_2002 = 2002;public static final int YEAR_2001 = 2001;public static final int YEAR_2000 = 2000;@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;@Beforepublic void before() {elasticsearchTemplate.deleteIndex(ArticleEntity.class);elasticsearchTemplate.createIndex(ArticleEntity.class);elasticsearchTemplate.putMapping(ArticleEntity.class);elasticsearchTemplate.refresh(ArticleEntity.class);IndexQuery article1 = new ArticleEntityBuilder("1").title("article four").subject("computing").addAuthor(RIZWAN_IDREES).addAuthor(ARTUR_KONCZAK).addAuthor(MOHSIN_HUSEN).addAuthor(JONATHAN_YAN).score(10).buildIndex();IndexQuery article2 = new ArticleEntityBuilder("2").title("article three").subject("computing").addAuthor(RIZWAN_IDREES).addAuthor(ARTUR_KONCZAK).addAuthor(MOHSIN_HUSEN).addPublishedYear(YEAR_2000).score(20).buildIndex();IndexQuery article3 = new ArticleEntityBuilder("3").title("article two").subject("computing").addAuthor(RIZWAN_IDREES).addAuthor(ARTUR_KONCZAK).addPublishedYear(YEAR_2001).addPublishedYear(YEAR_2000).score(30).buildIndex();IndexQuery article4 = new ArticleEntityBuilder("4").title("article one").subject("accounting").addAuthor(RIZWAN_IDREES).addPublishedYear(YEAR_2002).addPublishedYear(YEAR_2001).addPublishedYear(YEAR_2000).score(40).buildIndex();elasticsearchTemplate.index(article1);elasticsearchTemplate.index(article2);elasticsearchTemplate.index(article3);elasticsearchTemplate.index(article4);elasticsearchTemplate.refresh(ArticleEntity.class);}@Testpublic void shouldReturnAggregatedResponseForGivenSearchQuery() {// givenSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withSearchType(SearchType.DEFAULT).withIndices("test-index-articles").withTypes("article").addAggregation(terms("subjects").field("subject")).build();// whenAggregations aggregations = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {@Overridepublic Aggregations extract(SearchResponse response) {return response.getAggregations();}});// 
// Aggregations 只是获得了结果,没有取出数据;以及这样的实例;
assertThat(aggregations, is(notNullValue())); assertThat(aggregations.asMap().get("subjects"), is(notNullValue()));}}

其实上面代码使用 restful 方式的拼写为:
GET test-index-articles/article/_search
{"size": 0, "aggs": {"my_aggs_hehe": {"terms": {"field": "subject"}}}
}
以及返回的结果:
{"took": 231,"timed_out": false,"_shards": {"total": 1,"successful": 1,"failed": 0},"hits": {"total": 4,"max_score": 0,"hits": []},"aggregations": {"my_aggs_hehe": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "computing","doc_count": 3},{"key": "accounting","doc_count": 1}]}}
}

那么我经过使用 java 的 debug 模式查看生成的类:


于是我将代码写如下:
@Testpublic void shouldReturnAggregatedResponseForGivenSearchQuery() {// givenSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withSearchType(SearchType.DEFAULT).withIndices("test-index-articles").withTypes("article").addAggregation(terms("subjects").field("subject")).build();// whenAggregations aggregations = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {@Overridepublic Aggregations extract(SearchResponse response) {return response.getAggregations();}});Map<String, Aggregation> map=aggregations.asMap();for(String s:map.keySet()){StringTerms a=(StringTerms) map.get(s);List<Terms.Bucket> list=a.getBuckets();for(Terms.Bucket b:list){System.out.println("key is "+ b.getKeyAsString()+"---and value is "+ b.getDocCount());}}// thenassertThat(aggregations, is(notNullValue()));assertThat(aggregations.asMap().get("subjects"), is(notNullValue()));}
于是结果为:
key is computing---and value is 3
key is accounting---and value is 1
												

springdata elasticsearch aggregation 操作相关推荐

  1. Elasticsearch安装操作步骤

    Elasticsearch安装操作步骤 操作步骤 1,下载elasticsearch 2,上传到linux环境 3,安装及配置 4,es后台启动 操作步骤 1,下载elasticsearch http ...

  2. Elasticsearch RestHighLevelClient操作

    RestHighLevelClient操作 <dependency><groupId>org.elasticsearch.client</groupId><a ...

  3. Spring Data ElasticSearch的操作

    依赖 <!--springdata elasticsearch--><dependency><groupId>org.springframework.boot< ...

  4. Elasticsearch高级操作

    文章目录 一.高级javaAPI操作 1.统计每个球队当中球员的数量 2.统计每个球队中每个位置的球员数量 3.分组求各种值 4.统计每个球队年龄最小值 5.分组求平均值 6.分组求和 7.聚合排序 ...

  5. elasticsearch简单操作(二)

    让我们建立一个员工目录,假设我们刚好在Megacorp工作,这时人力资源部门出于某种目的需要让我们创建一个员工目录,这个目录用于促进人文关怀和用于实时协同工作,所以它有以下不同的需求: 1.数据能够包 ...

  6. Elasticsearch Aggregation 多个字段分组统计 Java API实现

    2019独角兽企业重金招聘Python工程师标准>>> 现有索引数据: index:school type:student ----------------------------- ...

  7. elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg...

    分析 最后,我们还有一个需求需要完成:允许管理者在职员目录中进行一些分析. Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中 ...

  8. python连接es数据库_Python Elasticsearch API操作ES集群

    环境Centos 7.4 Python 2.7 Pip 2.7 MySQL-python 1.2.5 Elasticsearc 6.3.1 Elasitcsearch6.3.2 知识点调用Python ...

  9. Elasticsearch Java 操作client

    0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ...

  10. SpringData ElasticSearch入门案例

    导入需要的依赖坐标 <dependencies><dependency><groupId>org.elasticsearch</groupId>< ...

最新文章

  1. centos7执行sh文件_一文看懂centos7如何管理自定义脚本服务
  2. python给用户打标签_python用户评论标签匹配的解决方法
  3. 【剑指offer】面试题53 - 1:在排序数组中查找数字 I(java)
  4. js模板引擎art template数组渲染的方法
  5. hbase 操作指令集合
  6. 活动目录的安装:深入浅出Active Directory系列(二)
  7. 莫比乌斯反演汇总【算法+题目】
  8. Android 选择国家对应区号 中英双版
  9. codeforces 999 C. Alphabetic Removals(1200)
  10. 第六届ACM省赛总结--吕云飞
  11. btcTrade_project
  12. int、tinyint、bigint的区别/MySQL中
  13. java调用jasper_Java开源报表Jasper入门(2) -- 使用JasperSoft Studio创建一个简单报表
  14. alpha测试和beta测试的区别是什么?
  15. python模拟蚂蚁森林能量产生过程代码_用Python实现定时自动化收取蚂蚁森林能量,再也不用担心忘记收取了...
  16. 技术选型系列 -- Redis VS Memcached
  17. 反思广交会:人民币升值对中国经济压力有多大?
  18. autojs编写的网易云音乐和视频搜索脚本源代码免费分享开源
  19. Python一字一字的显示文本内容
  20. 剑指offer面试题(21-30)——java实现

热门文章

  1. linux工作周报范文300字,工作周报范文300字
  2. varbinary mysql_MySQL中的数据类型binary和varbinary详解
  3. Java的括号使用规则_java编码规范
  4. 「期末」微机原理复习速成(上)
  5. 【男人必看十大经典】[经典合集][DVD-Rmvb/7.70GB] 【原音中文字幕】已测
  6. 京东支付逻辑存在不安全因素
  7. 面试失败总结,这 577 道 LeetCode 题 Java 版答案你值得拥有
  8. CorelDRAW X4 SP2 简体中文正式版精简增强版
  9. PHP读dwg,dwg文件阅读器
  10. 苹果计算机 win10,苹果windows10怎么安装_苹果电脑安装win10教程