您的位置:首页 > 其它

【工作笔记】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
相关文章推荐