Elasticsearch 实战应用:高效搜索与数据分析

在大数据和实时数据分析的背景下,Elasticsearch 作为一个开源的分布式搜索引擎,凭借其强大的查询能力、实时性能以及高可扩展性,成为了各种应用场景中不可或缺的工具。从网站搜索到日志分析,Elasticsearch 在搜索、日志聚合、数据监控和大数据分析中得到了广泛应用。

本文将带你深入了解 Elasticsearch 的基本原理,并结合实际案例展示如何在企业应用中使用 Elasticsearch,帮助你更好地掌握这一强大的工具。

1. 什么是 Elasticsearch?

Elasticsearch 是一个基于 Apache Lucene 的开源分布式搜索和分析引擎。它能够提供实时的全文搜索、分布式数据存储和分析功能。Elasticsearch 具有以下几个核心特点:

  • 全文搜索:可以对大量文本数据进行快速的全文搜索。
  • 分布式架构:可以水平扩展,支持大规模数据存储和查询。
  • 实时性:支持近实时数据的搜索和分析,查询结果非常迅速。
  • 高可扩展性:无论数据量如何增长,Elasticsearch 都能保持高效的查询性能。

2. Elasticsearch 架构基础

在了解 Elasticsearch 的实战应用之前,首先需要理解它的基本架构。Elasticsearch 使用了 节点索引文档分片副本 等概念,下面简要介绍:

  • 节点(Node):Elasticsearch 集群中的一台机器称为节点。节点之间通过网络互相通信,协同工作。
  • 集群(Cluster):一个 Elasticsearch 集群由多个节点组成,所有节点共享数据和处理请求。
  • 索引(Index):索引是存储和搜索文档的核心单位。在 Elasticsearch 中,数据以 JSON 格式存储在文档中,并组织成索引。
  • 文档(Document):文档是索引中的一条数据记录,是由字段组成的 JSON 数据。文档是 Elasticsearch 中进行搜索和查询的基本单元。
  • 分片(Shard):索引可以分为多个分片,以实现数据的分布式存储。每个分片都可以在集群中的不同节点上存储。
  • 副本(Replica):为了提高容错性和查询性能,Elasticsearch 会为每个分片创建一个副本。

3. Elasticsearch 实战应用案例

下面我们将通过几个常见的应用场景来展示如何在实际开发中使用 Elasticsearch。

3.1. 网站搜索功能

在许多网站中,搜索功能是用户体验的核心。Elasticsearch 提供了快速的全文搜索和精确匹配功能,非常适合用来实现网站搜索。假设我们要在一个电商网站中实现商品搜索功能。

3.1.1. 创建索引

首先,我们需要为商品数据创建索引,定义商品的字段,例如商品名称、描述、价格等。

 

PUT /products
{"mappings": {"properties": {"name": {"type": "text"},"description": {"type": "text"},"price": {"type": "float"},"category": {"type": "keyword"}}}
}

 

在这个索引中,namedescription 字段是 text 类型,意味着它们会进行分词处理以支持全文搜索。price 字段是 float 类型,用于存储价格,category 字段是 keyword 类型,适用于精确匹配查询。

3.1.2. 索引文档

接下来,向 Elasticsearch 中添加商品数据文档。

 

POST /products/_doc/1
{"name": "Apple iPhone 13","description": "The latest iPhone with 5G support","price": 999.99,"category": "smartphones"
}POST /products/_doc/2
{"name": "Samsung Galaxy S21","description": "Flagship smartphone with AMOLED display","price": 799.99,"category": "smartphones"
}

 

3.1.3. 搜索功能

在搜索框中,用户输入关键词,Elasticsearch 将根据输入内容返回相关商品。例如,用户搜索 "iPhone" 时,Elasticsearch 会对商品名称和描述字段进行全文搜索。

 

GET /products/_search
{"query": {"match": {"name": "iPhone"}}
}

 

这个查询将返回所有名称中包含 "iPhone" 的商品。Elasticsearch 会对 name 字段进行分词匹配,找到相关商品。

3.2. 日志分析与聚合

Elasticsearch 的强大功能之一是日志分析。通过 Elasticsearch,企业可以将应用程序和系统的日志数据集中存储,并进行实时分析。比如,我们可以用 Elasticsearch 来分析 Web 服务器的访问日志。

3.2.1. 创建日志索引

假设我们正在收集 Web 服务器的访问日志,每一条日志包含 IP 地址、请求时间、HTTP 方法、请求路径、响应状态码等信息。

 

PUT /logs
{"mappings": {"properties": {"ip": {"type": "ip"},"timestamp": {"type": "date"},"method": {"type": "keyword"},"path": {"type": "text"},"status": {"type": "integer"}}}
}

 3.2.2. 索引日志数据

 

POST /logs/_doc/1
{
  "ip": "192.168.1.1",
  "timestamp": "2024-11-06T08:00:00",
  "method": "GET",
  "path": "/home",
  "status": 200
}

3.2.3. 日志聚合与分析

可以通过 Elasticsearch 提供的聚合功能对日志进行统计分析。比如,我们可以计算不同状态码的请求数量:

GET /logs/_search
{"size": 0,"aggs": {"status_codes": {"terms": {"field": "status"}}}
}

这个查询会返回每个状态码的请求数量,从而帮助分析网站的健康状况,检查错误页面的发生情况。

3.3. 数据监控与告警

Elasticsearch 也常用于实时监控和告警。例如,可以监控应用程序的性能数据或服务器的健康状态。当数据超出预设的阈值时,触发告警。

3.3.1. 创建监控数据索引

假设我们正在监控服务器的 CPU 使用率,创建一个索引记录服务器的资源使用情况。

PUT /server_metrics
{"mappings": {"properties": {"timestamp": {"type": "date"},"cpu_usage": {"type": "float"}}}
}

3.3.2. 索引资源数据

POST /server_metrics/_doc/1
{"timestamp": "2024-11-06T08:30:00","cpu_usage": 85.5
}

 

3.3.3. 查询与告警

通过聚合分析,我们可以定期检查 CPU 使用率,如果超过 80% 时触发告警。

 

GET /server_metrics/_search
{"size": 0,"aggs": {"high_cpu_usage": {"avg": {"field": "cpu_usage"}}}
}

如果查询结果超过 80%,系统就会触发告警。

4. 总结

Elasticsearch 是一个非常强大且灵活的工具,它不仅可以用于网站搜索,还能应用于日志分析、实时监控、数据聚合等多种场景。无论是需要快速全文搜索,还是需要对大量数据进行复杂分析,Elasticsearch 都能提供高效的解决方案。通过结合案例中的实际操作,可以帮助你更好地理解 Elasticsearch 的应用,并在实际开发中灵活运用它来解决各种数据管理和查询的问题。

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

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

相关文章

人工智能大比拼(3)

已知x-,y-6,且下述表达式的值与x的取值无关,求y -10x2y7xy 上述这个很简单的数学题,可是在各家AI之间出现了争议,本期我使用了四个AI:kimi,商量,文心一言,chatyy 先来看一下kimi的表…

Xilinx Aurora 8B/10B IP介绍以及下板验证

文章目录 一、什么是Aurora协议?二、Aurora 8B/10B IP核的结构原理三、Aurora 8B/10B IP核 延迟开销四、用户数据接口格式4.1 AXI4-Stream 位排序4.2 帧传输用户端口说明4.3 帧传输数据流程4.4 Aurora 8B/10B 帧格式4.5 帧格式数据传输时序4.5.1 简单数据传输4.5.2 …

Redis8:商户查询缓存2

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

Camera Tuning中AE/AWB/AF基础知识介绍

3A定义 3A是Camera ISP控制算法的一个重要组成部分,通常分为自动曝光(AE)、自动聚焦(AF)、自动白平衡(AWB)三个组件。 自动曝光(Auto Exposure) AE基本概念 曝光概念…

数据库中的用户管理和权限管理

​ 我们进行数据库操作的地方其实是数据库的客户端,是我们在客户端将操作发送给数据库的服务器(MySQL的服务器是mysqld),由数据库处理之后发送回来处理结果(其实就是一种网络服务)。所以可以存在多个客户端…

ubuntu24.04安装matlab失败

又是摸鱼摆烂的一天,好难过~ 官方教程:https://ww2.mathworks.cn/help/install/ug/install-products-with-internet-connection.html 问题描述:https://ww2.mathworks.cn/matlabcentral/answers/2158925-cannot-install-matlab-r2…

Hive1.2.1与Hbase1.4.13集成---版本不兼容问题

hive与hbase集成失败,汗流夹背了吧老弟......哈哈哈哈,刷到这篇文章,那你可真是太幸运啦~ 常见错误一: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/h…

项目1:井字棋 --- 《跟着小王学Python》

项目1:井字棋 — 《跟着小王学Python新手》 文章目录 项目1:井字棋 --- 《跟着小王学Python新手》目标功能设计1. 数据结构2. 功能模块3. 用户界面 实现步骤代码实现测试注意事项小结 目标 本技术文章旨在指导读者如何使用 Python 编程语言来实现一个简…

Python 的 Pygame 库,编写简单的 Flappy Bird 游戏

Pygame 是一个用 Python 编写的开源游戏开发框架,专门用于编写 2D 游戏。它提供了丰富的工具和功能,使得开发者能够快速实现游戏中的图形渲染、声音播放、输入处理和动画效果等功能。Pygame 非常适合初学者和想要快速创建游戏原型的开发者。 Pygame 的主…

LeetCode-222.完全二叉树的节点个数

. - 力扣(LeetCode) 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一…

【MongoDB】MongoDB的核心-索引原理及索引优化、及查询聚合优化实战案例(超详细)

文章目录 一、数据库查询效率问题引出索引需求二、索引的基本原理及作用(一)索引的创建及数据组织(二)不同类型的索引(三)索引的额外属性 三、索引的优化与查询计划分析(一)通过prof…

企业如何实现无缝数据中心进行大数据迁移呢?

数据中心迁移是企业面临的一个复杂而关键的挑战,涉及到大量的数据移动和系统的重新部署。随着业务的扩展和技术的进步,企业可能需要将数据中心迁移到新的位置或升级到更先进的设备。在进行数据迁移时,必须精心规划和执行,以确保数…

初始JavaEE篇 —— 网络编程(2):了解套接字,从0到1实现回显服务器

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 TCP 与 UDP Socket套接字 UDP TCP 网络基础知识 在一篇文章中,我们了解了基础的网络知识,网络的出…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…

最全最简单理解迭代器

1. 迭代器的基础概念(iterator) 1.1 本质 迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针。 1.2 作用: 能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来。重载了*,++,==,!=,=运算符。用以操作复杂的数据结构。容器提供迭代…

MTSET可溶于DMSO、DMF、THF等有机溶剂,并在水中有轻微的溶解性,91774-25-3

一、基本信息 中文名称:[2-(三甲基铵)乙基]甲硫基磺酸溴;MTSET巯基反应染料 英文名称:MTSET;[2-(Trimethylammonium)ethyl]methanethiosulfonate Bromide CAS号:91774-25-3 分子式:C6H16BrNO2S2 分子量…

CC1链学习记录

🌸 前言 上篇文章学习记录了URLDNS链,接下来学习一下Common-Colections利用链。 🌸 相关介绍 Common-Colections是Apache软件基金会的项目,对Java标准的Collections API提供了很好的补充,在其基础上对常用的数据结构…

数据结构PTA

20:C 22:B 27:D 填空 4-2:19 4-4:66 4-5:8 5-x:不加分号 ⬇:top p->next 编程 单链表 每个节点除了存放数据元素外,还要存储指向下一节点的指针…

【学术会议介绍,SPIE 出版】第四届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2024,12月13-15日)

第四届计算机图形学、人工智能与数据处理国际学术会议 2024 4th International Conference on Computer Graphics, Artificial Intelligence and Data Processing (ICCAID 2024) 重要信息 大会官网:www.iccaid.net 大会时间:2024年12月13-15日 大会地…

【go从零单排】Command-Line Flags、Command-Line Subcommands命令行和子命令

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,命令行标志(Command-Line Flags&#xff09…