引入
Elasticsearch聚合查询是一种强大的工具,允许我们对索引中的数据进行复杂的统计分析和计算。本文将详细解释一个聚合查询示例,该查询用于统计满足特定条件的文档数量,并计算其占总文档数量的百分比。
文章目录
- 引入
- 一、集群的概念
- 1.1 节点以及节点类型
- 1.2 请求和响应流程
- 二、集群的搭建
- 2.1 Elasticsearch集群搭建
- 2.2 Kibana安装
- 2.3 X-pack安全认证
- 三、利用索引查询数据
- 3.1 创建索引
- 3.2 索引示例数据
- 3.3 解析查询结果
- 四、总结
一、集群的概念
1.1 节点以及节点类型
Elasticsearch集群是由一个或多个节点组成的分布式系统,每个节点可以运行在不同的物理服务器或虚拟机上。节点可以分为不同的类型:
如下图 ,就是一个三个节点组成的es集群,p0、p1、p2表示一个节点中的分片,R0、R1、R2表示分片对应的副本
- 主节点(Master Node) :负责管理集群范围内的操作,如索引创建和节点加入等。通常情况下,建议集群中只有少数几个主节点。
- 数据节点(Data Node) :存储索引数据及执行与数据相关的操作,如索引、搜索和聚合等。大多数情况下,数据节点也参与主节点选举。
- 客户端节点(Client Node) :作为集群的接入点,用于转发请求到数据节点或主节点,从而减轻数据节点和主节点的负载。
1.2 请求和响应流程
- 客户端发送请求
HTTP请求:客户端通过发送HTTP请求与Elasticsearch集群进行交互。请求可以是读取操作(如搜索、获取文档)、写入操作(如索引新文档、更新文档)或管理操作(如创建索引、设置映射)。
请求路由:如果ES集群配置了客户端节点(client node),则客户端请求首先到达客户端节点。客户端节点根据请求类型和路由信息,决定将请求发送到哪些节点执行。如果没有客户端节点,请求会直接发送到任意的数据节点或主节点上。
- 节点接收和处理请求
- 以下是一个简单的es集群架构:
二、集群的搭建
2.1 Elasticsearch集群搭建
在搭建Elasticsearch集群之前,确保你已经安装了Java环境。以下是基本步骤:
-
下载和安装Elasticsearch:
bash wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-linux-x86_64.tar.gz tar -zxvf elasticsearch-7.0.0-linux-x86_64.tar.gz cd elasticsearch-7.0.0/
-
配置Elasticsearch:编辑配置文件
config/elasticsearch.yml
,配置节点名称、集群名称、网络绑定等。yaml cluster.name: my-cluster node.name: node-1 network.host: 0.0.0.0
-
启动Elasticsearch:
bash ./bin/elasticsearch
确保重复上述步骤来配置和启动其他节点,以组成一个完整的集群。
2.2 Kibana安装
Kibana是Elasticsearch的可视化工具,用于查询和分析数据。安装步骤如下:
-
下载和解压Kibana:
bash wget https://artifacts.elastic.co/downloads/kibana/kibana-7.0.0-linux-x86_64.tar.gz tar -zxvf kibana-7.0.0-linux-x86_64.tar.gz cd kibana-7.0.0-linux-x86_64/
-
配置Kibana:编辑配置文件
config/kibana.yml
,设置Elasticsearch的地址和端口。yaml server.host: "localhost" elasticsearch.hosts: ["http://localhost:9200"]
-
启动Kibana:
bash ./bin/kibana
访问
http://localhost:5601
可以打开Kibana的Web界面。
2.3 X-pack安全认证
X-Pack提供了Elasticsearch的安全功能,包括认证、授权、审计和SSL/TLS加密。安装和配置X-Pack安全认证步骤如下:
-
安装X-Pack插件:
bash ./bin/elasticsearch-plugin install x-pack
-
配置X-Pack安全:编辑Elasticsearch配置文件
config/elasticsearch.yml
,配置用户名和密码认证。yaml xpack.security.enabled: true
-
设置初始密码:
bash ./bin/elasticsearch-setup-passwords interactive
通过交互式命令设置Elasticsearch内置用户的密码。
三、利用索引查询数据
3.1 创建索引
在Elasticsearch中,索引用于存储和组织数据。以下是创建用户和订单索引的示例:
bash
PUT /users
{
"mappings": {
"properties": {
"user_id": { "type": "keyword" },
"name": { "type": "text" },
"email": { "type": "keyword" }
}
}
}
PUT /orders
{
"mappings": {
"properties": {
"order_id": { "type": "keyword" },
"user_id": { "type": "keyword" },
"amount": { "type": "float" },
"timestamp": { "type": "date" }
}
}
}
3.2 索引示例数据
向创建的索引中插入一些示例数据,以便后续的统计演示:
bash
POST /users/_doc/1
{
"user_id": "1",
"name": "Alice",
"email": "alice@example.com"
}
POST /users/_doc/2
{
"user_id": "2",
"name": "Bob",
"email": "bob@example.com"
}
POST /orders/_doc/1
{
"order_id": "1",
"user_id": "1",
"amount": 100.5,
"timestamp": "2024-07-01T10:00:00"
}
POST /orders/_doc/2
{
"order_id": "2",
"user_id": "1",
"amount": 50.2,
"timestamp": "2024-07-01T11:00:00"
}
POST /orders/_doc/3
{
"order_id": "3",
"user_id": "2",
"amount": 75.0,
"timestamp": "2024-07-01T12:00:00"
}
3.3 解析查询结果
执行聚合查询来计算每个用户的订单数量:
bash
POST /orders/_search
{
"size": 0,
"aggs": {
"users": {
"terms": {
"field": "user_id.keyword",
"size": 10
},
"aggs": {
"total_orders": {
"value_count": {
"field": "order_id.keyword"
}
}
}
}
}
}
查询结果会返回每个用户的订单数量统计:
json
{
"aggregations": {
"users": {
"buckets": [
{
"key": "1",
"doc_count": 2,
"total_orders": {
"value": 2
}
},
{
"key": "2",
"doc_count": 1,
"total_orders": {
"value": 1
}
}
]
}
}
}
四、总结
通过本教程,你学习了如何利用Elasticsearch集群索引数据,并通过聚合查询来统计多个数据。你现在应该能够理解Elasticsearch集群的基本概念、搭建步骤以及如何创建索引、插入数据和执行查询。继续探索Elasticsearch的强大功能,可以帮助你处理大规模数据并进行复杂的数据分析和统计。