ElasticSearch5.X添加度量聚合(二)
来源:互联网 发布:淘宝开代购店 编辑:程序博客网 时间:2024/06/07 13:07
添加度量指标编辑
前面的例子(http://blog.csdn.net/wwd0501/article/details/78501842,测试数据跟上篇一样)告诉我们每个桶里面的文档数量,这很有用。 但通常,我们的应用需要提供更复杂的文档度量。 例如,每种颜色汽车的平均价格是多少?
为了获取更多信息,我们需要告诉 Elasticsearch 使用哪个字段,计算何种度量。 这需要将度量 嵌套 在桶内, 度量会基于桶内的文档计算统计结果。
让我们继续为汽车的例子加入 average
平均度量:
GET /cars/transactions/_search{ "size" : 0, "aggs": { "colors": { "terms": { "field": "color" }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } }}
为度量新增 aggs
层。
为度量指定名字: avg_price
。
最后,为 price
字段定义 avg
度量。
正如所见,我们用前面的例子加入了新的 aggs
层。这个新的聚合层让我们可以将 avg
度量嵌套置于 terms
桶内。实际上,这就为每个颜色生成了平均价格。
正如 颜色
的例子,我们需要给度量起一个名字( avg_price
)这样可以稍后根据名字获取它的值。最后,我们指定度量本身( avg
)以及我们想要计算平均值的字段( price
):
{... "aggregations": { "colors": { "buckets": [ { "key": "red", "doc_count": 4, "avg_price": { "value": 32500 } }, { "key": "blue", "doc_count": 2, "avg_price": { "value": 20000 } }, { "key": "green", "doc_count": 2, "avg_price": { "value": 21000 } } ] } }...}
响应中的新字段 avg_price
。
尽管响应只发生很小改变,实际上我们获得的数据是增长了。之前,我们知道有四辆红色的车,现在,红色车的平均价格是 $32,500 美元。这个信息可以直接显示在报表或者图形中。
java代码实现:
/** * Description:桶聚合查询中添加度量指标 * 例:计算每种颜色汽车的平均价格是多少 * * @author wangweidong * CreateTime: 2017年11月9日 下午3:47:54 */ @Test public void bucketsMetricsAggregation() { String index = "cars"; String type = "transactions"; SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index).setTypes(type); TermsAggregationBuilder colorsField = AggregationBuilders.terms("popular_colors").field("color.keyword"); AvgAggregationBuilder avgPriceField = AggregationBuilders.avg("avg_price").field("price"); colorsField.subAggregation(avgPriceField); searchRequestBuilder.addAggregation(colorsField); searchRequestBuilder.setSize(0); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); System.out.println(searchResponse.toString()); Terms genders = searchResponse.getAggregations().get("popular_colors"); for (Terms.Bucket entry : genders.getBuckets()) { Object key = entry.getKey(); // Term Long count = entry.getDocCount(); // Doc count Aggregations agg = entry.getAggregations(); Avg avg = agg.get("avg_price"); Double avgPrice = avg.getValue(); System.out.println(key + "车有" + count + "辆,平均每台车价格:" + avgPrice); } }文章参考:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_adding_a_metric_to_the_mix.html
阅读全文
0 0
- ElasticSearch5.X添加度量聚合(二)
- ElasticSearch5.X聚合-条形图(四)
- Elasticsearch5.X聚合简介
- ElasticSearch5.X尝试聚合(一)
- ElasticSearch5.X按时间统计-聚合(五)
- ElasticSearch5.X搜索条件的聚合(六)
- ElasticSearch5.X按时间统计-聚合
- elasticsearch5.x(二)elasticsearch、logstash、kibana安装步骤(linux)
- Elasticsearch5.x学习经验总结(一)
- ElasticSearch5.X嵌套桶(三)
- Elasticsearch5.X进行聚合操作时提示Fielddata is disabled on text fields by default
- elasticsearch5.x服务器搭建
- SpringBoot + Elasticsearch5.x
- Elasticsearch5.X配置说明
- Elasticsearch5.X索引
- 多维模型---不可累加度量(求和之外的度量聚合)
- “add measurements”(添加度量)菜单问题
- Elasticsearch5.2.2进行数据聚合测试
- Linux下which、whereis、locate、find 命令的区别
- JCAOB---Java文本转语音
- 031day(STL排序算法sort)
- node上传图片重命名及添加后缀
- 面试题22:栈的压入、弹出序列
- ElasticSearch5.X添加度量聚合(二)
- 仿淘宝首页的淘宝头条垂直滚动
- JQuery属性
- 《Android开发艺术探索》读书笔记---configChanges的项目和含义
- Spring事务传播机制与隔离级别
- leetcode_658. Find K Closest Elements ? 待解决
- java基础
- docker 文档资料整理
- spring clound中服务调服务,一对多对象转json时报错解决方法