【工作笔记】ElasticSearch从零开始学(三)—— 入门(聚合)
2017-03-09 10:44
344 查看
分析
最后,我们还有一个需求需要完成:允许管理者在职员目录中进行一些分析。 Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计。它很像SQL中的GROUP BY但是功能更强大举个例子,让我们找到所有职员中最大的共同点是什么
GET /megacorp/employee/_search { "aggs": { "all_interests": { //类似以GroupBy interests "terms": { "field": "interests" } } } }
{ ... "hits": { ... }, "aggregations": { "all_interests": { "buckets": [ { "key": "music", "doc_count": 2 }, { "key": "forestry", "doc_count": 1 }, { "key": "sports", "doc_count": 1 } ] } } }
我们可以看到两个职员对音乐有兴趣,一个喜欢林学,一个喜欢运动。这些数据并没有被预先计算好,它们是实时的从匹配查询语句的文档中动态计算生成的
如果我们想知道所有姓”Smith”的人最大的共同点(兴趣爱好)
GET /megacorp/employee/_search { "query": { "match": { "last_name": "smith" } }, "aggs": { "all_interests": { "terms": { "field": "interests" } } } }
all_interests聚合已经变成只包含和查询语句相匹配的文档了
... "all_interests": { "buckets": [ { "key": "music", "doc_count": 2 }, { "key": "sports", "doc_count": 1 } ] }
聚合也允许分级汇总。例如,让我们统计每种兴趣下职员的平均年龄
GET /megacorp/employee/_search { "aggs" : { "all_interests" : { "terms" : { "field" : "interests" }, "aggs" : { "avg_age" : { "avg" : { "field" : "age" } } } } } }
... "all_interests": { "buckets": [ { "key": "music", "doc_count": 2, "avg_age": { "value": 28.5 } }, { "key": "forestry", "doc_count": 1, "avg_age": { "value": 35 } }, { "key": "sports", "doc_count": 1, "avg_age": { "value": 25 } } ] }
该聚合结果比之前的聚合结果要更加丰富。我们依然得到了兴趣以及数量(指具有该兴趣的员工人数)的列表,但是现在每个兴趣额外拥有avg_age字段来显示具有该兴趣员工的平均年龄
总结
Elasticsearch致力于隐藏分布式系统的复杂性。以下这些操作都是在底层自动完成的:将你的文档分区到不同的容器或者分片(shards)中,它们可以存在于一个或多个节点中。
将分片均匀的分配到各个节点,对索引和搜索做负载均衡。
冗余每一个分片,防止硬件故障造成的数据丢失。
将集群中任意一个节点上的请求路由到相应数据所在的节点。
无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移。
以上转载
https://es.xiaoleilu.com/010_Intro/35_Tutorial_Aggregations.html
相关文章推荐
- 【工作笔记】ElasticSearch从零开始学(二)—— 入门(搜索)
- 【工作笔记】ElasticSearch从零开始学(五)—— Java_SearchAPI
- 【工作笔记】从零开始学ElasticSearch( 十)—— 高级扩展:搜索(Basic)
- 【工作笔记】ElasticSearch从零开始学(六)—— JavaAPI_Aggregation
- 【工作笔记】从零开始学ElasticSearch( 八)—— 数据(CRUD语法)
- 【工作笔记】从零开始学ElasticSearch( 九)—— 高级扩展:分布式CRUD
- 【工作笔记】从零开始学ElasticSearch( 七)—— 集群
- 【工作笔记】ElasticSearch从零开始学(一)—— 介绍
- 【工作笔记】ElasticSearch从零开始学(四)—— Java_DocumentAPI(CRUD)
- java 从零开始,学习笔记之基础入门<数组>(七)
- java 从零开始,学习笔记之基础入门<网络编程_带QQ模拟功能>(二十)
- java 从零开始,学习笔记之基础入门<Date类_Calendar类>(十七)
- java 从零开始,学习笔记之基础入门<SQL_Server_常用查询>(二十二)
- java 从零开始,学习笔记之基础入门<SQL_Server>(二十一)
- java 从零开始,学习笔记之基础入门<抽象类_接口_多态>(十三)
- java 从零开始,学习笔记之基础入门<jsp>(二十六)
- java 从零开始,学习笔记之基础入门<集合>(十六)
- java 从零开始,学习笔记之基础入门<异常>(十五)
- java 从零开始,学习笔记之基础入门<JDBC>(二十四)
- java 从零开始,学习笔记之基础入门<数组列表(ArrayList)>(九)