【工作笔记】ElasticSearch从零开始学(三)—— 入门(聚合)

    xiaoxiao2021-03-25  129

    分析

    最后,我们还有一个需求需要完成:允许管理者在职员目录中进行一些分析。 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

    转载请注明原文地址: https://ju.6miu.com/read-9541.html

    最新回复(0)