Elasticsearch实战应用:从基础到高级

news2025/1/15 2:49:14

引言

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够快速地存储、搜索和分析大量数据。它广泛应用于日志分析、全文搜索、实时数据分析等场景。本文将深入探讨 Elasticsearch 的实战应用,涵盖从基础概念到高级应用的各个方面。

1. Elasticsearch 基础

1.1 核心概念

  • 索引(Index):类似于关系数据库中的“数据库”,是存储文档的地方。

  • 类型(Type):在 Elasticsearch 6.x 及之前版本中,索引可以包含多个类型,类似于“表”。但在 7.x 及以后版本中,类型被废弃,每个索引只能包含一个类型。

  • 文档(Document):索引中的基本数据单元,类似于关系数据库中的“行”。

  • 分片(Shard):索引可以被分成多个分片,每个分片是一个独立的索引,分布在集群中的不同节点上。

  • 副本(Replica):每个分片可以有多个副本,用于提高数据的可用性和查询性能。

1.2 安装与配置

Elasticsearch 的安装非常简单,可以通过以下步骤完成:

  1. 下载 Elasticsearch 安装包。

  2. 解压并运行 bin/elasticsearch 启动 Elasticsearch。

  3. 访问 http://localhost:9200 确认 Elasticsearch 是否正常运行。

配置文件 elasticsearch.yml 位于 config 目录下,常用的配置项包括:

  • cluster.name:集群名称。

  • node.name:节点名称。

  • network.host:绑定的网络地址。

  • discovery.seed_hosts:集群发现的主机列表。

2. 数据索引与搜索

2.1 创建索引

PUT /my_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "description": { "type": "text" },
      "price": { "type": "float" }
    }
  }
}

2.2 索引文档

POST /my_index/_doc/1
{
  "title": "Elasticsearch Guide",
  "description": "A comprehensive guide to Elasticsearch",
  "price": 29.99
}

2.3 搜索文档

GET /my_index/_search
{
  "query": {
    "match": {
      "title": "Elasticsearch"
    }
  }
}

3. 高级查询

3.1 布尔查询

布尔查询允许组合多个查询条件,常用的布尔操作符包括 mustshouldmust_not

GET /my_index/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } },
        { "range": { "price": { "gte": 20, "lte": 30 } } }
      ]
    }
  }
}

3.2 聚合查询

聚合查询用于对数据进行统计分析,常见的聚合类型包括 termsavgsum 等。

GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "avg_price": {
      "avg": { "field": "price" }
    }
  }
}

4. 性能优化

4.1 分片与副本策略

  • 分片数量:分片数量应根据数据量和集群规模合理设置,过多的分片会增加集群的管理开销。

  • 副本数量:副本数量应根据查询负载和数据安全性需求设置,增加副本可以提高查询性能和数据可用性。

4.2 查询优化

  • 使用过滤器:过滤器(filter)不会计算相关性分数,性能优于查询(query)。

  • 避免深度分页:深度分页(如 from 和 size 参数过大)会导致性能问题,建议使用 search_after 或 scroll API。

5. 实战案例:日志分析系统

5.1 系统架构

  • 数据采集:使用 Filebeat 采集日志数据。

  • 数据存储:将日志数据存储到 Elasticsearch 中。

  • 数据展示:使用 Kibana 进行数据可视化和分析。

5.2 实现步骤

5.2.1 安装与配置 Filebeat

5.3 实际应用

假设我们有一个 Web 服务器,每天生成大量的访问日志。通过上述系统,我们可以实时采集这些日志,并存储到 Elasticsearch 中。然后,使用 Kibana 进行数据可视化,分析访问量、错误日志、用户行为等。

例如,我们可以创建一个仪表盘,展示以下信息:

通过这些分析,我们可以及时发现系统异常、优化用户体验,并为业务决策提供数据支持。

6. 总结

Elasticsearch 是一个功能强大且灵活的搜索和分析引擎,适用于各种数据存储和检索场景。通过本文的介绍,读者可以掌握 Elasticsearch 的基础知识、高级查询技巧以及性能优化方法,并能够将其应用于实际的日志分析系统中。希望本文能为读者在实际项目中应用 Elasticsearch 提供有价值的参考。

  1. 下载并安装 Filebeat

    curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.0-linux-x86_64.tar.gz
    tar xzvf filebeat-7.10.0-linux-x86_64.tar.gz
    cd filebeat-7.10.0-linux-x86_64
  2. 配置 Filebeat

    编辑 filebeat.yml 文件,配置日志文件路径和 Elasticsearch 输出:

    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/*.log
    
    output.elasticsearch:
      hosts: ["localhost:9200"]

  3. 启动 Filebeat

    ./filebeat -e
    5.2.2 创建索引模板
  4. 定义索引模板

    创建一个索引模板,确保日志数据按照预期格式存储:

    PUT /_template/logs_template
    {
      "index_patterns": ["logs-*"],
      "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1
      },
      "mappings": {
        "properties": {
          "@timestamp": { "type": "date" },
          "message": { "type": "text" },
          "source": { "type": "keyword" },
          "level": { "type": "keyword" }
        }
      }
    }
    5.2.3 配置 Kibana
  5. 启动 Kibana

    下载并启动 Kibana,访问 http://localhost:5601

  6. 创建索引模式

    在 Kibana 中创建索引模式 logs-*,用于匹配 Elasticsearch 中的日志索引。

  7. 设计仪表盘

    使用 Kibana 的可视化工具创建仪表盘,展示日志数据的统计信息,如日志级别分布、日志来源分布等。

  8. 访问量趋势:按时间统计访问量,使用折线图展示。

  9. 错误日志分布:按日志级别统计错误日志数量,使用柱状图展示。

  10. 用户行为分析:按用户 IP 统计访问次数,使用饼图展示。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

V少JS基础班之第四弹

一、 前言 第四弹内容是操作符。 本章结束。第一个月的内容就完成了, 是一个节点。 下个月我们就要开始函数的学习了。 我们学习完函数之后。很多概念就可以跟大家补充说明了。 OK,那我们就开始本周的操作符学习 本系列为一周一更,计划历时6…

【STM32-学习笔记-7-】USART串口通信

文章目录 USART串口通信Ⅰ、硬件电路Ⅱ、常见的电平标准Ⅲ、串口参数及时序Ⅳ、STM32的USART简介数据帧起始位侦测数据采样波特率发生器 Ⅴ、USART函数介绍Ⅵ、USART_InitTypeDef结构体参数1、USART_BaudRate2、USART_WordLength3、USART_StopBits4、USART_Parity5、USART_Mode…

Docker 安装开源的IT资产管理系统Snipe-IT

一、安装 1、创建docker-compose.yaml version: 3services:snipeit:container_name: snipeitimage: snipe/snipe-it:v6.1.2restart: alwaysports:- "8000:80"volumes:- ./logs:/var/www/html/storage/logsdepends_on:- mysqlenv_file:- .env.dockernetworks:- snip…

达梦8-DMSQL程序设计学习笔记1-DMSQL程序简介

1、DMSQL程序简介 DMSQL程序是达梦数据库对标准SQL语言的扩展,是一种过程化SQL语言。在DMSQL程序中,包括一整套数据类型、条件结构、循环结构和异常处理结构等,DMSQL程序中可以执行SQL语句,SQL语句中也可以使用DMSQL函数。 DMSQ…

NLP中常见的分词算法(BPE、WordPiece、Unigram、SentencePiece)

文章目录 一、基本概念二、传统分词方法2.1 古典分词方法2.2 拆分为单个字符 三、基于子词的分词方法(Subword Tokenization)3.1 主要思想3.2 主流的 Subword 算法3.3 Subword 与 传统分词方法的比较 四、Byte Pair Encoding (BPE)4.1 主要思想4.2 算法过…

第三十六章 Spring之假如让你来写MVC——拦截器篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

PyTorch 深度学习框架快速入门 (小土堆)

PyTorch 深度学习框架快速入门 深度学习框架常用模块数据集存取图片数据处理库 —— PILOS 模块实例 Tensorboard 记录机器学习的过程Transform 进行图像变换数据集的下载DataLoaderModule 自定义网络前向传播卷积层卷积简单应用 最大池化非线性层线性层 简单的整合基于现有网络…

FPGA的 基本结构(Xilinx 公司Virtex-II 系列FPGA )

以Xilinx 公司Virtex-II 系列FPGA 为例,其基本结构由下图所示。它是主要由两大部分组成:可编程输入/输出(Programmable I/Os)部分和内部可配置(Configurable Logic)部分。 可编程输入/输出(I/Os…

【Elasticsearch】批量操作:优化性能

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探…

C++、Haskell 和 Rust 三种语言实现 Faster Suffix Sort 算法的比较

对 C、Haskell 和 Rust 三种语言实现 Faster Suffix Sort 算法的比较: 1. 编程效率 C: 优点:C 提供了丰富的标准库,如 std::sort,可以方便地结合自定义比较函数对后缀数组进行排序。使用 Lambda 表达式可以简洁地实现…

校园跑腿小程序---轮播图,导航栏开发

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…

uniapp实现H5页面内容居中与两边留白,打造类似微信公众号阅读体验

在 UniApp 中,由于需要兼容多端应用,我们通常使用 rpx 作为尺寸单位。然而,在某些情况下,如需要实现内容居中且两边留白时,直接使用 rpx 可能会带来一些限制。这时,我们可以考虑使用 px 或 rem 等单位&…

【Uniapp-Vue3】pages.json页面路由globalStyle的属性

项目的全局配置在pages.json中。 一、导航栏设置 二、下拉刷新设置 下拉就可以看到设置的样式 三、上拉触底 这个页面中,向下滑动页面到底部就会输出“到底了” 现在将触底距离设置为500 走到半路就会输出“到底了”

Type-C双屏显示器方案

在数字化时代,高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步,一款结合了便携性和高效视觉输出的设备——双屏便携屏,逐渐崭露头角,成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…

Linux下部署Redis(本地部署超详细)

非docker 1、下载Redis 历史版本: http://download.redis.io/releases 我的: http://download.redis.io/releases/redis-7.0.5.tar.gz 2.安装教程 1.Redis是基于c语言编写的需要安装依赖,需要安装gcc yum install gcc-c 2.查看gcc版…

使用 Multer 上传图片到阿里云 OSS

文件上传到哪里更好? 上传到服务器本地 上传到服务器本地,这种方法在现今商业项目中,几乎已经见不到了。因为服务器带宽,磁盘 IO 都是非常有限的。将文件上传和读取放在自己服务器上,并不是明智的选择。 上传到云储存…

UE5 打包项目

UE5 打包项目 flyfish 通过 “文件”->“打开项目”,然后在弹出的对话框中选择项目文件(通常是以.uproject为后缀的文件) 选择目标平台: 在 UE5 主界面中,找到 “平台”(Platforms)。根据…

自然语言转 SQL:通过 One API 将 llama3 模型部署在 Bytebase SQL 编辑器

使用 Open AI 兼容的 API,可以在 Bytebase SQL 编辑器中使用自然语言查询数据库。 出于数据安全的考虑,私有部署大语言模型是一个较好的选择 – 本文选择功能强大的开源模型 llama3。 由于 OpenAI 默认阻止出站流量,为了简化网络配置&#…

杭州铭师堂的云原生升级实践

作者:升学e网通研发部基建团队 公司介绍 杭州铭师堂,是一个致力于为人的全面发展而服务的在线教育品牌。杭州铭师堂秉持“用互联网改变教育,让中国人都有好书读”的使命,致力于用“互联网教育”的科技手段让更多的孩子都能享有优…

STM32 FreeRTOS移植

目录 FreeRTOS源码结构介绍 获取源码 1、 官网下载 2、 Github下载 源码结构介绍 源码整体结构 FreeRTOS文件夹结构 Source文件夹结构如下 portable文件夹结构 RVDS文件夹 MemMang文件夹 FreeRTOS在基于寄存器项目中移植步骤 目录添加源码文件 工程添加源码文件 …