【Elasticsearch入门到落地】1、初识Elasticsearch

一、什么是Elasticsearch

Elasticsearch(简称ES)是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。它使用Java编写,基于Apache Lucene来构建索引和提供搜索功能,是一个分布式、可扩展、近实时的高性能搜索与数据分析引擎。

1、Elasticsearch用在哪些场景?

我们想想一下,例如我们去github上去搜索一些仓库,它去搜索的时候,不仅仅是把相关的仓库搜索出来,还可以把你搜索的关键字所在的相关代码块展示出来,并进行了高亮显示,非常智能:

又例如我们去京东上买东西,输入商品信息后,网站立马就会显示出和我们输入的关键字有关的商品,例如下图输入“iPhone”后,下面商品搜索出与苹果手机相关的商品,并且“iPhone”这个字还会高亮显示:

还比如,我们平时编程时遇到一些问题,肯定会去百度和谷歌一下,找相关问题的答案。在搜索引擎中输入相关问题描述,下面就会显示和这个问题相关的答案,并且和搜索关键字相关的内容也会被高亮显示:

甚至是在我们平时打车的时候,我们搜索附近车辆的时候,每一辆车所在的位置也是搜索范围,是否是我们所在区域关键字的位置的车,为我们匹配最近的车辆:

以上的这些场景,Elasticsearch都可以实现。

2、Elastic stack(ELK)技术栈介绍

Elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域。

什么是“日志数据分析”?就是我们的项目在实际运行过程中,会产生海量的日志信息,这些日志信息会方便我们定义系统出现的问题。而Elasticsearch可以帮我们将这些日志进行可视化展示,方便我们做日志分析。
另一个“实时监控”的概念,即我们在项目运行的过程中,它的运行状态也是数据,如CPU、内存等情况,也可以被Elasticsearch收集并展示过来:

这足以看出Elasticsearch这个搜索引擎的应用范围是非常广泛的。

在ELK的技术栈中,尽管有很多个组件,但核心就是我们的Elasticsearch,它主要负责数据的存储、计算、搜索和分析;而Logstash和Beats主要负责数据抓取,Kibana则是一个数据可视化组件,用来在页面上展示数据:

在ELK数据栈中,Logstash和Beats、Kibana都不是不可替代的,我们可以使用自己的方法抓取数据,和进行图形化展示。而Elasticsearch这个核心组件是不可替代的。

二、Elasticsearch的底层

Elasticsearch底层基于Apache Lucene开源库进行封装。Lucene是一个Java语言的高性能、可扩展的搜索引擎类库,它提供了全文索引和搜索的底层实现。是Apache公司的顶级项目,由DougCutting于1999年研发。

官网地址:https://lucene.apache.org/

打开官网首页我们可以看到,截止到2024年11月Lucene的最新版本是10.0.0版,已经迭代了很多版本了。

1、Lucene的优点

Lucene其实就是一个浓缩的jar包(类库),它有以下的优点:
(1)易扩展
Lucene具有高度的可扩展性和可定制性,其系统架构设计精良,使得开发者能够方便地根据业务需求进行功能扩展和定制(二次开发)。通过实现特定的接口和继承相关类,开发者可以轻松地添加新功能、优化现有功能或调整索引和搜索逻辑。
(2)高性能(基于倒排索引)
Lucene的高性能主要得益于其采用的倒排索引技术。倒排索引是一种将文档中的词汇项作为关键字,文档ID作为值,形成的“值-键”对调的索引结构。这种结构使得Lucene在搜索时能够直接根据关键词快速定位到包含该词的所有文档,从而极大地提高了搜索效率。此外,Lucene还通过一系列优化措施,如压缩索引数据、使用缓存等,进一步提升了搜索性能。
想象我们有一堆书,想要快速找到包含某个关键词的书,最直接的方法是逐本翻阅,但这显然非常耗时。而Lucene则采用了一种更聪明的方法,即倒排索引。它首先为每本书中的每个关键词建立一个索引,记录下这个关键词出现在哪些书中以及出现的位置。这样,当我们想要找到包含某个关键词的书时,只需要查看这个索引,就能迅速定位到相关的书。这种索引方式就像是一个高效的“书签”,帮助我们快速找到目标内容,从而大大提高了搜索效率。

2、Lucene的缺点

以上是Lucene的优点,但同时它也存在以下缺点:
(1)只限于Java语言开发
Lucene是一个基于Java语言开发的搜索引擎库,这意味着它主要适用于Java语言的项目和开发环境。对于那些不使用Java的项目或团队来说,可能需要额外的学习和集成成本。
(2)学习曲线陡峭
Lucene作为一个功能强大且复杂的搜索引擎库,API设计非常复杂晦涩,其学习曲线相对陡峭。对于初学者来说,需要花费较多的时间和精力来熟悉Lucene的架构、API和最佳实践。
(3)不支持水平扩展(需二次开发)
Lucene的主要目的是为了实现搜索,而对于高并发、高可用等场景没有技术支持,无法直接进行水平扩展(集群扩展),即通过在多个服务器上部署多个实例来共同处理搜索请求。虽然Lucene可以通过分片(sharding)等技术在一定程度上实现数据的分布式存储和搜索,但这需要开发者进行额外的二次开发工作。

三、Elasticsearch的发展


Elasticsearch的起源可以追溯到2004年,当时Shay Banon基于Lucene开发了一个名为Compass的搜索引擎(单体应用,主要为他老婆搜索食谱用)。然而,随着技术的不断演进和需求的日益增长,Shay Banon在2010年决定重写Compass(支持分布式和集群环境),并将其命名为Elasticsearch。这一决定标志着Elasticsearch作为一个独立的开源项目正式诞生,并迅速在搜索和分析领域崭露头角。
Elasticsearch的官网地址为:https://www.elastic.co/cn/:

这是一个提供Elasticsearch相关资源、文档和社区支持的权威平台,它是由Elastic公司管理,这个公司的创始人就是上面提到Elasticsearch的原创者Shay Banon。
截止至2024年11月,Elasticsearch已经发展到了8.15.3版本,这一版本在性能、功能和安全性等方面都进行了诸多优化和升级。随着版本的迭代,Elasticsearch不断引入新技术和特性,以满足日益复杂和多样化的搜索和分析需求。
相比于Lucene,Elasticsearch具备下列优势:

1、支持分布式,可水平扩展:

Elasticsearch采用了分布式架构,可以轻松扩展到多个节点,以便处理大规模数据。这种架构使得Elasticsearch能够应对PB级别的数据存储和搜索需求,同时保持高性能和可用性。
通过分片(sharding)和复制(replication)机制,Elasticsearch实现了数据的高可用性和容错性。即使某个节点发生故障,系统也能快速切换到其他节点,确保搜索和分析服务的连续性。

2、提供Restful接口,可被任何语言调用:

Elasticsearch提供了一个简单易用的RESTful API,使得数据的索引、搜索和分析变得非常简单。这一API遵循REST风格,支持HTTP协议,因此可以被任何编程语言调用。
通过RESTful API,开发者可以轻松地将Elasticsearch集成到各种应用程序中,实现数据的实时搜索、分析和可视化。这种灵活性使得Elasticsearch成为构建现代搜索和分析应用的理想选择。
综上所述,Elasticsearch作为Lucene的衍生产品,不仅继承了Lucene的强大搜索功能,还通过分布式架构和RESTful API等创新特性,实现了更高的可扩展性、易用性和集成性。这些优势使得Elasticsearch在搜索和分析领域具有广泛的应用前景和巨大的市场潜力。

四、为什么学习Elasticsearch?

实际上,从Lucene诞生开始,就不止Elasticsearch一个搜索引擎程序问世,其中还包含Splunk(商业项目)、Solr(Apache的开源搜索引擎),但是Elasticsearch在全球搜索引擎排名中,一直稳坐第一名的宝座,并且和第二名Splunk拉开了很大差距:

其实在Elasticsearch刚刚诞生时,Solr在全球搜索引擎中占有很大比例,但是随着后来的发展,Solr渐渐地被Elasticsearch超越了(大概是2016年):

所以我们主要还是以学习目前占比最高的搜索引擎作为我们本次学习的目标。

五、学习总结

本篇博客,我们一共学习了以下三个知识,大家可以回顾一下:
1、什么是elasticsearch?
一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析系统监控等功能
2、什么是elastic stack(ELK)?
是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch
3、什么是Lucene?
是Apache的开源搜索引擎类库,提供了搜索引擎的核心API

至此,关于elasticsearch的基础介绍就到此结束了,为了更加深入理解elasticsearch为的原理,下一篇我们来学习什么是“倒排索引”。

参考:《黑马Elasticsearch全套教程》

转载请注明出处:https://guangzai.blog.csdn.net/article/details/143658138

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

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

相关文章

扫雷游戏代码分享(c基础)

hi , I am 36. 代码来之不易👍👍👍 创建两个.c 一个.h 1:test.c #include"game.h"void game() {//创建数组char mine[ROWS][COLS] { 0 };char show[ROWS][COLS] { 0 };char temp[ROWS][COLS] { 0 };//初始化数…

ORA-01092 ORA-14695 ORA-38301

文章目录 前言一、MAX_STRING_SIZE--12C 新特性扩展数据类型 varchar2(32767)二、恢复操作1.尝试恢复MAX_STRING_SIZE参数为默认值2.在upgrade模式下执行utl32k.sql 前言 今天客户发来一个内部测试库数据库启动截图报错,描述是“上午出现服务卡顿,然后重…

ODOO学习笔记(3):Odoo和Django的区别是什么?

Odoo和Django都是基于Python的开源框架,但它们的设计目标和用途有所不同: 设计目标和用途: Odoo:Odoo是一个企业资源规划(ERP)系统,它提供了一套完整的商业管理软件,包括会计、库存…

零基础玩转IPC之——海思平台实现P2P远程传输实验(基于TUTK,国科君正全志海思通用)

老规矩,先做实验测试。以本店Hi3516EV200\GK7205开发板为例,其他开发板操作类似。 将源码包p2p-h264.tgz放到虚拟机,解压,编译 tar -jxvf p2p-h264.tgz cd p2p-h264 make clean make 得到可执行文件p2p-h264 启动开发板&…

如何理解DDoS安全防护在企业安全防护中的作用

DDoS安全防护在安全防护中扮演着非常重要的角色。DDoS(分布式拒绝服务)攻击是一种常见的网络攻击,旨在通过向目标服务器发送大量请求,以消耗服务器资源并使其无法正常运行。理解DDoS安全防护的作用,可以从以下几个方面…

Python如何从HTML提取img标签下的src属性

目录 前提准备步骤1. 解析HTML内容2. 查找所有的img标签3. 提取src属性 完整代码 前提准备 在处理网页数据时,我们经常需要从HTML中提取特定的信息,比如图片的URL。 这通常通过获取img标签的src属性来实现。 在开始之前,你需要确保已经安装…

Redis主从复制(replication)

文章目录 是什么作用使用案例实操主从复制原理和工作流程slave启动,同步初请首次连接,全量复制心跳持续,保持通信进入平稳,增量复制从机下线,重连续传 复制的缺点 是什么 主从复制,master以写为主&#xf…

Android OpenGL ES详解——纹理:纹理过滤GL_NEAREST和GL_LINEAR的区别

目录 一、概念 1、纹理过滤 2、邻近过滤 3、线性过滤 二、邻近过滤和线性过滤的区别 三、源码下载 一、概念 1、纹理过滤 当纹理被应用到三维物体上时,随着物体表面的形状和相机视角的变化,会导致纹理在渲染过程中出现一些问题,如锯齿…

记录日志中logback和log4j2不能共存的问题

本文章记录设置两个日志时候,控制台直接报错 标黄处就是错误原因:1. SLF4J(W):类路径包含多个SLF4J提供程序。 SLF4J(W):找到提供程序[org.apache.logging.slf4j. net]。 SLF4J(W):找到提供程序[ch.qos.log .classi…

【PGCCC】Postgresql Toast 原理

前言 上篇博客讲述了 postgresql 如何存储变长数据,它的应用主要是在 toast 。Toast 在存储大型数据时,会将它存储在单独的表中(称为 toast 表)。因为 postgresql 的 tuple(行数据)是存在在 Page 中的&…

C指针创建三维数组

定义的时候变量的位置就是最后一个星号的位置 int*** matrix3d_int(int nz, int nrh, int nch) {int*** matrix (int***)malloc(nz * sizeof(int**));for (int z 0; z < nz; z) {matrix[z] (int**)malloc(nrh * sizeof(int*));for (int y 0; y < nrh; y) {matrix[z][…

window下安装rust 及 vscode配置

安装 安装mingw64 &#xff08;c语言环境 选择posix-ucrt&#xff09; ucrt:通用c运行时库配置mingw64/bin的路径到环境变量中在cmd窗口中输入命令 "gcc -v" 4. 下载Rust安装程序 安装 Rust - Rust 程序设计语言 5. 配置rustup和cargo目录 &#xff08;cargo是包管…

wordpress搭建主题可配置json

网站首页展示 在线访问链接 http://dahua.bloggo.chat/ 配置json文件 我使用的是argon主题&#xff0c;你需要先安装好主题&#xff0c;然后可以导入我的json文件一键配置。 需要json界面配置文件的&#xff0c;可以在评论区回复&#xff0c;看见评论我会私发给你。~

基于表格滚动截屏(表格全部展开,没有滚动条)

import html2canvasPro from html2canvas // 截图&#xff0c;平辅表格 async function resetAgSize() {const allColumns gridApi.value.getColumns()let totalColumnWidth 0let totalColumnHeight 0// 遍历每一个行节点gridApi.value.forEachNode((rowNode) > {totalCo…

运行springBlade项目历程

框架选择 官网地址&#xff1a;https://bladex.cn 使用手册&#xff1a;https://www.kancloud.cn/smallchill/blade 常见问题&#xff1a;https://sns.bladex.cn/article-14966.html 问答社区&#xff1a;https://sns.bladex.cn 环境配置 存在jdk8的情况下安装jdk17 jdk17gi…

文件上传漏洞--理论

什么是文件上传漏洞&#xff1f; Web应用允许用户上传文件&#xff0c;但是没有对上传的文件进行严格的过滤和检测&#xff0c;导致网站执行了文件中包含的恶意代码。 漏洞的基本利用方式是&#xff1a; 成功上传包含恶意代码的文件&#xff0c;并在服务端成功执行该文件。 …

物联网(RFID)全景:被装信息化监控应用与挑战

一、被装物联网信息化建设的动因 信息化改革在20世纪80年代中期启航&#xff0c;旨在提升被装保障的效率。随着时间的推移&#xff0c;硬件的广泛运用和软件的快速迭代&#xff0c;装备业务在规划、制造、分发以及战时支援等核心环节&#xff0c;已经与信息系统深度融合&#x…

解决C盘空间不足的三种方案

方案一&#xff1a;网上盛传的C盘磁盘碎片整理&#x1f9e9;&#xff08;原理&#xff1a;将分散的文件片段整理到相邻的磁盘区域&#xff0c;减少文件的碎片化程度&#xff09;(效果不明显) 方案二&#xff1a;把其他盘的空间给C盘 &#x1f4bd;&#xff08;效果显著&#xf…

[项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]

YOLOv5是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv5具有更高的…

有什么初学算法的书籍推荐?

对于初学算法的读者&#xff0c;以下是一些值得推荐的书籍&#xff1a; 1、算法超简单&#xff1a;趣味游戏带你轻松入门与实践 作者&#xff1a;童晶 著 推荐理由&#xff1a;本书把趣味游戏应用于算法教学&#xff0c;提升读者的学习兴趣&#xff0c;并通过可视化的图解和动…