当前位置: 首页 > news >正文

Elasticsearch实战教程:如何使用集群索引数据来进行统计多个数据?


在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏: 《C++干货基地》《粉丝福利》

⛺️生活的理想,就是为了理想的生活!

引入

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 请求和响应流程

  1. 客户端发送请求
    HTTP请求:客户端通过发送HTTP请求与Elasticsearch集群进行交互。请求可以是读取操作(如搜索、获取文档)、写入操作(如索引新文档、更新文档)或管理操作(如创建索引、设置映射)。

请求路由:如果ES集群配置了客户端节点(client node),则客户端请求首先到达客户端节点。客户端节点根据请求类型和路由信息,决定将请求发送到哪些节点执行。如果没有客户端节点,请求会直接发送到任意的数据节点或主节点上。

  1. 节点接收和处理请求
  • 以下是一个简单的es集群架构:

在这里插入图片描述

二、集群的搭建

2.1 Elasticsearch集群搭建

在搭建Elasticsearch集群之前,确保你已经安装了Java环境。以下是基本步骤:

  1. 下载和安装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/
    
  2. 配置Elasticsearch:编辑配置文件 config/elasticsearch.yml,配置节点名称、集群名称、网络绑定等。

    yaml
    cluster.name: my-cluster
    node.name: node-1
    network.host: 0.0.0.0
    
  3. 启动Elasticsearch

    bash
    ./bin/elasticsearch
    

    确保重复上述步骤来配置和启动其他节点,以组成一个完整的集群。

2.2 Kibana安装

Kibana是Elasticsearch的可视化工具,用于查询和分析数据。安装步骤如下:

  1. 下载和解压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/
    
  2. 配置Kibana:编辑配置文件 config/kibana.yml,设置Elasticsearch的地址和端口。

    yaml
    server.host: "localhost"
    elasticsearch.hosts: ["http://localhost:9200"]
    
  3. 启动Kibana

    bash
    ./bin/kibana
    

    访问 http://localhost:5601 可以打开Kibana的Web界面。

2.3 X-pack安全认证

X-Pack提供了Elasticsearch的安全功能,包括认证、授权、审计和SSL/TLS加密。安装和配置X-Pack安全认证步骤如下:

  1. 安装X-Pack插件

    bash
    ./bin/elasticsearch-plugin install x-pack
    
  2. 配置X-Pack安全:编辑Elasticsearch配置文件 config/elasticsearch.yml,配置用户名和密码认证。

    yaml
    xpack.security.enabled: true
    
  3. 设置初始密码

    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的强大功能,可以帮助你处理大规模数据并进行复杂的数据分析和统计。

相关文章:

  • 通义千问接入进阶:流式、文件、图片、上下文
  • BAT批处理运行项目
  • 微信小程序毕业设计-社区门诊管理系统项目开发实战(附源码+论文)
  • C语言单链表的算法之删除节点
  • nginx的匹配及重定向
  • linux配置qqbot(Mirai+Alicebot)
  • 企业搭建知识库:解锁无限潜力的钥匙
  • Hadoop页面报错Permission denied: user=dr.who, access....
  • 详细分析Spring Boot 数据源配置的基本知识(附配置)
  • [C++初阶]vector的初步理解
  • 7.1作业6
  • vector与list的简单介绍
  • 收银系统源码-营销活动-幸运抽奖
  • SpringMVC(1)——入门程序+流程分析
  • MAX98357、MAX98357A、MAX98357B小巧、低成本、PCM D类IIS放大器,具有AB类性能中文说明规格书
  • 【刷算法】从上往下打印二叉树
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • AWS实战 - 利用IAM对S3做访问控制
  • CentOS6 编译安装 redis-3.2.3
  • Docker 笔记(2):Dockerfile
  • Facebook AccountKit 接入的坑点
  • select2 取值 遍历 设置默认值
  • vue自定义指令实现v-tap插件
  • 规范化安全开发 KOA 手脚架
  • 解决iview多表头动态更改列元素发生的错误
  • 京东美团研发面经
  • 两列自适应布局方案整理
  • 网络应用优化——时延与带宽
  • 新手搭建网站的主要流程
  • 延迟脚本的方式
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 7行Python代码的人脸识别
  • Nginx实现动静分离
  • #Spring-boot高级
  • #Z0458. 树的中心2
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (175)FPGA门控时钟技术
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C++17) optional的使用
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (java)关于Thread的挂起和恢复
  • (二)hibernate配置管理
  • (二)WCF的Binding模型
  • (二开)Flink 修改源码拓展 SQL 语法
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (五)关系数据库标准语言SQL
  • (一)python发送HTTP 请求的两种方式(get和post )
  • .net web项目 调用webService
  • .NET 分布式技术比较
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .net项目IIS、VS 附加进程调试
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @AliasFor注解
  • @Transient注解