ES的聚合
我们还有一个需求需要完成:允许管理者在职员目录中进行一些分析。 Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计。它很像SQL中的GROUP BY
但是功能更强大。
举个例子,让我们找到所有职员中最大的共同点(兴趣爱好)是什么:
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests" }
}
}
}
暂时先忽略语法只看查询结果:
{ "took": 229, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 3, "max_score": 1, "hits": [ { "_index": "megacorp", "_type": "employee", "_id": "1", "_score": 1, "_source": { "first_name": "John", "last_name": "Smith", "age": 32, "about": "I like to collect rock albums", "interests": [ "music" ] } }, { "_index": "megacorp", "_type": "employee", "_id": "2", "_score": 1, "_source": { "first_name": "Lily", "last_name": "Smith", "age": 29, "about": "I like to go shopping!", "interests": [ "music" ] } }, { "_index": "megacorp", "_type": "employee", "_id": "3", "_score": 1, "_source": { "first_name": "Tom", "last_name": "Smith", "age": 18, "about": "I like to play basketball!", "interests": [ "music" ] } } ] }, "aggregations": { "all_interests": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "music", "doc_count": 3 } ] } } }
我们可以看到两个职员对音乐有兴趣,一个喜欢林学,一个喜欢运动。这些数据并没有被预先计算好,它们是实时的从匹配查询语句的文档中动态计算生成的。如果我们想知道所有名为"Tom"的人最大的共同点(兴趣爱好),我们只需要增加合适的语句既可:
GET /megacorp/employee/_search
{
"query": {
"match": {
"first_name": "Tom"
}
},
"aggs": {
"all_interests": {
"terms": {
"field": "interests"
}
}
}
}
all_interests
聚合已经变成只包含和查询语句相匹配的文档了:
{ "took": 5, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 1, "max_score": 0.30685282, "hits": [ { "_index": "megacorp", "_type": "employee", "_id": "3", "_score": 0.30685282, "_source": { "first_name": "Tom", "last_name": "Smith", "age": 18, "about": "I like to play basketball!", "interests": [ "music" ] } } ] }, "aggregations": { "all_interests": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "music", "doc_count": 1 } ] } } }
聚合也允许分级汇总。例如,让我们统计每种兴趣下职员的平均年龄:
GET /megacorp/employee/_search
{
"aggs" : {
"all_interests" : {
"terms" : { "field" : "interests" },
"aggs" : {
"avg_age" : {
"avg" : { "field" : "age" }
}
}
}
}
}
"aggregations": { "all_interests": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "music", "doc_count": 3, "avg_age": { "value": 26.333333333333332, "value_as_string": "26.333333333333332" } } ] } }
该聚合结果比之前的聚合结果要更加丰富。我们依然得到了兴趣以及数量(指具有该兴趣的员工人数)的列表,但是现在每个兴趣额外拥有avg_age
字段来显示具有该兴趣员工的平均年龄。
即使你还不理解语法,但你也可以大概感觉到通过这个特性可以完成相当复杂的聚合工作,你可以处理任何类型的数据。
相关推荐
**ES学习及介绍** 在IT领域,"ES"通常指的是Elasticsearch,一个开源的、分布式全文搜索引擎。它被广泛应用于大数据分析、日志搜索、实时监控等多种场景,以其高效、灵活和强大的搜索功能著称。本文将深入探讨...
总结来说,Elasticsearch 是一个基于 Lucene 的分布式搜索引擎,专注于全文检索、结构化搜索和数据分析,以其天然分片、集群支持和高效检索能力,适应于处理大数据场景下的各种搜索和分析任务。无论是在线服务、内部...
es学习总结 脑图。需要提前下载Mindjet MindManager 9
### Elasticsearch路由机制详解 #### 一、Elasticsearch 路由机制概述 Elasticsearch是一种高度可扩展的开源搜索引擎,其设计目的是处理大量数据,同时保持快速的响应时间。为了实现这一目标,Elasticsearch采用了...
**一、Elasticsearch简介** Elasticsearch是一个开源的全文搜索引擎,基于Apache Lucene构建,用Java编写。它简化了全文检索的过程,提供了一套RESTful API,使得操作变得直观简单。Elasticsearch不仅是一个搜索...
ES的原理
**Elasticsearch 全文检索概述** Elasticsearch 是一种高度可扩展的开源全文搜索引擎,基于 Apache Lucene 构建。它提供了实时、稳定、快速的搜索功能,并且具有易于安装和使用的特性,适合在云环境中部署。Elastic...
**Elasticsearch 1.5.2 with Head 插件** Elasticsearch 是一个高度可扩展的开源全文搜索引擎,设计用于处理大量...通过深入学习和熟练使用 Elasticsearch,你可以构建高效的搜索和分析解决方案,满足各种业务需求。
总结,这个项目是一个使用Maven和Spring MVC构建的Elasticsearch客户端应用,展示了如何集成Elasticsearch以进行数据索引、映射管理和文档的CRUD操作。开发人员可以通过分析`pom.xml`文件了解具体的依赖关系,并在`...
在Linux环境中,Elasticsearch作为一个强大的全文搜索引擎,广泛用于数据检索和分析。为了方便在命令行界面进行查询和操作,开发者...因此,学习并掌握es2unix对于Linux环境下的Elasticsearch用户来说是十分必要的。
一个人的es学习总结笔记
总结来说,Elasticsearch是一本全面的实战指南,它从基础到高级,逐步深入地引导读者掌握Elasticsearch的使用和管理技巧。无论你是Elasticsearch的新手还是有经验的开发者,这本书都能帮助你更好地使用Elasticsearch...
ElasticSearch学习笔记1 ElasticSearch是基于Lucene的搜索服务器,它提供了高性能的全文搜索功能,支持开箱即用的集群化扩展。ElasticSearch可以通过标准的REST API或特定于编程语言的客户端库与之交互。 一、什么...
Elasticsearch 7.14.0 是一个强大的开源全文搜索引擎,它以其高效、可扩展性和易用性而闻名。这个版本提供了许多重要的改进和新特性,使得数据...记得在使用过程中持续学习和优化,以充分发挥 Elasticsearch 的潜力。
"Elasticsearch官方提供数据案例account.json"是一个很好的学习资源,可以帮助用户理解Elasticsearch如何处理和分析JSON数据。通过导入这个数据集,用户可以实践索引创建、查询编写、数据分析以及使用Kibana进行可视...
- **SQL 支持**:通过 Elasticsearch SQL,用户可以直接使用 SQL 查询语句进行数据检索,降低了学习曲线。 - **索引生命周期管理**:自动执行索引策略,如过期数据的清理,简化了数据管理流程。 **Linux 版本安装与...
Elasticsearch和curl命令学习总结_逝水流年染轻尘的博客-CSDN博客.htm