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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/773932.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为何整个 AI 领域都朝着 AI Agents 这一方向发展?

编者按: 当前大热的大语言模型和检索增强生成模型,虽然在语言理解和内容生成方面取得了突破性的进展,但仍然存在诸多限制。它们缺乏根据目标导引行为、持续学习和与环境交互的能力,难以应对复杂多变的现实场景需求。 今天为大家带…

国信华源全力守护湖南水库安全,汛期坚守岗位

连日来,湖南省遭受持续强降雨侵袭,部分地区暴雨倾盆,山塘河库水位急剧上升,防汛形势极为严峻。面对这场防汛大考,北京国信华源公司迅速响应,技术团队以高度的责任感和使命感,全力投入防汛减灾工…

ASP.NET Core Blazor 5:Blazor表单和数据

本章将描述 Blazor 为处理 HTML 表单提供的特性&#xff0c;包括对数据验证的支持。 1 准备工作 继续使用上一章项目。   创建 Blazor/Forms 文件夹并添加一个名为 EmptyLayout.razor 的 Razor 组件。本章使用这个组件作为主要的布局。 inherits LayoutComponentBase<div …

vue表单增加合计

vue表单增加合计&#xff0c;有两种方式&#xff1a; 第一种前端获取所有数据&#xff1a; 将 show-summary 设置为true就会在表格尾部展示合计行。 默认情况下&#xff0c;对于合计行&#xff0c;第一列不进行数据求合操作&#xff0c;而是显示「合计」二字&#xff08;可通…

LeetCode刷题记录:(14)文本左右对齐

遇见困难题不要怕&#xff0c;说不定就是一个简单模拟题 . 执行用时 相关企业 leetcode 传送通道 class Solution {List<String> ans new ArrayList<>(); // 本题答案列表int[] lens; // 记录每个单词长度&#xff0c;方便后续补齐空格操作int maxRowLen; // 替代…

sql业务场景分析思路参考

1、时间可以进行排序&#xff0c;也可以用聚合函数对时间求最大值max&#xff08;时间&#xff09; 例如下面的例子&#xff1a;取最晚入职的人&#xff0c;那就是将入职时间倒序排序&#xff0c;然后limit 1 表&#xff1a; 场景&#xff1a;查找最晚入职员工的所有信息 se…

【数据集】中国农田栅格数据CACD(1986-2021)

中国农田栅格数据(1986-2021) 数据概述数据下载参考精确、详细和及时的耕地范围信息对于保障食品安全和环境可持续性至关重要。然而,由于农业景观的复杂性以及缺乏足够的训练样本,要在大范围地理区域内高空间和时间分辨率下监测耕地动态仍然具有挑战性,特别是对于农业土地…

抖音本地生活服务商入驻要求中暗含哪些信息?入局要点都在里面了!

随着抖音外卖的正式开放&#xff0c;许多创业者对于做抖音本地生活服务商的意向愈发强烈&#xff0c;抖音本地生活服务商入驻要求及相关话题更是在多个创业者群内被翻来覆去地讨论&#xff0c;且多次刷屏。 而就抖音目前在本地生活市场的布局来看&#xff0c;其主要的重心还是…

哪里还可以申请免费一年期的SSL证书?

目前&#xff0c;要申请免费一年期的SSL证书&#xff0c;选项较为有限&#xff0c;因为多数供应商已转向提供短期的免费证书&#xff0c;通常有效期为90天。不过&#xff0c;有一个例外是JoySSL&#xff0c;它仍然提供一年期的免费SSL证书&#xff0c;但是只针对教育版和政务版…

【人工智能】--强化学习(2.0)

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;强化学习与有监督学习的区别 &#x1f348;数据特点 &#x1f348;学习目标 &#x1f348;反馈机制 &#x1f348;策略…

如何在word中敲出可以点击打勾和取消打勾的方框呢?

文章目录 要解决的问题网上出现的几种不可行的方案发现解决措施 要解决的问题 在word中敲出 点击就可以打对勾和取消对钩的方框 网上出现的几种不可行的方案 插入-> 符号&#xff0c;此方法打出的方框是fixed的&#xff0c;不是我想要的可以自己自主打勾和不打勾的方式。 …

Python获取QQ音乐歌单歌曲

准备工作 歌单分享的url地址 比如&#xff1a; https://i.y.qq.com/n2/m/share/details/taoge.html?hosteuinoKvzoK4l7evk7n**&id9102222552&appversion130605&ADTAGwxfshare&appshareiphone_wx 代码实现 def mu(share_url):share_url share_url.split(id…

CFS三层内网渗透——外网打点(一)

目录 外网打点 先爆破一下看看有没有啥可进攻路径 尝试那个可疑的路径发现是thinkphp这个框架&#xff0c;同时也知道了版本&#xff0c;那就nday打吧 写入php ​编辑写入php成功&#xff0c;简简单单nday拿下​编辑 蚁剑rce尝试链接 打点成功 外网打点 先爆破一下看看有…

Odoo 16 采购仪表盘概述

Odoo 16 的高级采购管理系统可让您轻松跟踪采购订单、定义产品、管理供应商和准备产品/服务。您可以在采购模块中管理与产品采购相关的所有功能。此模块还允许您跟踪采购订单和报价请求。将采购模块的功能与其他 Odoo 16 模块&#xff08;如会计、库存、销售和发票&#xff09;…

用免费的可视化工具制作3D智慧城市大屏,融合数字孪生,引领数据升级

在如今数据驱动的时代&#xff0c;越来越多的场景中都有可视化大屏的身影&#xff0c;许多企业和政府部门也从常规的二维看板渐渐地转向更加炫酷&#xff0c;立体的3D可视化大屏。3D可视化大屏成为了展示复杂数据、实时监控业务动态的重要工具。本文将详细介绍如何使用免费的数…

小型气象站在现代农业中的应用与前景

随着科技的飞速发展&#xff0c;智慧农业已成为现代农业发展的重要趋势。在这一背景下&#xff0c;小型气象站作为智慧农业的重要组成部分&#xff0c;正逐渐展现出其独特的价值和广阔的应用前景。本文将从小型气象站的定义、功能、应用案例以及未来展望等方面&#xff0c;探讨…

【网络安全】第4讲 身份认证技术(笔记)

一、身份认证技术概述 1、身份认证 是网络安全的第一道防线。是最基本的安全服务&#xff0c;其他的安全服务都依赖于它。在物联网应用系统中&#xff0c;身份认证也是整个物联网应用层信息安全体系的基础。 2、基本身份认证技术 &#xff08;1&#xff09;双方认证 是一种双…

工业废水中镍超标怎么办?含镍废水处理方法有哪些?

镍是一种存在于自然界中的过渡金属。镍在土壤和岩石中的存量丰富&#xff0c;大部分镍已被氧化&#xff0c;或与其他元素结合成化合物。   含镍废水主要来源于电镀、合金制造、金属表面处理、电子等行业。这些行业在生产过程中&#xff0c;通常会使用含有镍离子的化学试剂&a…

PyCharm中如何将某个文件设置为默认运行文件

之前在使用JetBrain公司的另一款软件IDEA的时候&#xff0c;如果在选中static main函数后按键altenter可以默认以后运行Main类的main函数。最近在使用PyCharm学习Python&#xff0c;既然同为一家公司的产品而且二者的风格如此之像&#xff0c;所以我怀疑PyCharm中肯定也有类似的…

HttpServer内存马

HttpServer内存马 基础知识 一些基础的方法和类 HttpServer&#xff1a;HttpServer主要是通过带参的create方法来创建&#xff0c;第一个参数InetSocketAddress表示绑定的ip地址和端口号。第二个参数为int类型&#xff0c;表示允许排队的最大TCP连接数&#xff0c;如果该值小…