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

【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

相关文章:

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

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

电子版产品册代替纸质版产品册,开源节流!

​在当今数字化时代,企业纷纷寻求创新手段以降低成本、提高效率。纸质版产品册作为传统宣传手段,虽然具有一定的宣传效果,但成本高昂、更新不便、环保压力等问题日益凸显。本文将为您详细解析如何通过采用电子版产品册替代纸质版产品册&#…...

npm i忽略依赖冲突

在使用npm安装依赖时,如果遇到依赖冲突,通常npm会提示错误并阻止安装。但是,如果你想要忽略这些依赖冲突,可以使用以下几种方法: 1.使用--force或-f参数:这个参数会强制npm忽略某些错误,包括依…...

商品,订单业务流程梳理一

业务架构梳理 业务系统介绍 业务商品流程 业务订单流程 业务售后流程 系统架构 技术栈...

Spring中的 bean 标签中的 factory-bean , factory-method

1.首先说说 factory-method 是指定创造实例的工厂方法,用法: factory-method 和 class 配合使用,这时 factory-method 必须是class所指定的类中的一个静态方法,也就是Spring会直接调用 class 所指定的类的静态工厂方法创建一个实例…...

车间管理|基于SprinBoot+vue工厂车间管理系统设计与实现(源码+数据库+文档)

车间管理系统系统 目录 基于SprinBootvue工厂车间管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&…...

C#实战:使用腾讯云识别服务轻松提取火车票信息

目录 一、腾讯票据单据识别 Invoice OCR服务介绍 二、开发完整流程 2.1 开通文字识别服务 2.2 创建开发者密钥 2.3 创建项目编写代码集成 三、总结 公司内部涉及到车票报销的时候一个个输入火车票信息非常麻烦,尤其是出差比较多的企业,这对于财务人…...

王珊数据库系统概论第六版PDF+第五版课后答案+课件

为了保持科学性、先进性和实用性, 编者在第5版教材基础上对全书内容进行了修改、更新和充实。在科学性方面, 编者在系统篇中增加了第9章关系数据库存储管理, 讲解数据库的逻辑与物理组织方式及索引结构。增加这部分内容有助于学生更好地理解关…...

Spring学习笔记(四)

二十一、Spring事务详解 &#xff08;一&#xff09;、Spring基于XML的事务配置 1.环境搭建 1.1 构建maven工程&#xff0c;添加相关技术依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context…...

CALL处 F8的“bug“

看zpchcbd师傅的一篇文章看到了这个比较有趣的点。实操跟着过一遍。 准确来说这个不能说是"bug"&#xff0c;这可以是一种"刻意为之"的手段&#xff0c;可以用于加壳、反调试等逆向技术中。 原理&#xff1a; F8步过call的时候&#xff0c;其实是在call的…...

Verilog中的有符号数与无符号数

1. 有符号与无符号最本质的区别在于高位扩展时的扩展规则不同&#xff1b; 对于同一个4‘b1001进行位扩展成8位&#xff1a; 有符号扩展结果为&#xff1a;8’b11111001 无符合扩展结果为: 8b00001001 2. 同第一点&#xff0c;若在运算中没有涉及位扩展&#xff0c;则有符…...

15分钟学 Go 第 47 天 :并发进阶——深入了解Go语言的并发模型!

第47天的学习&#xff1a;并发进阶——深入了解Go语言的并发模型&#xff01; 目录 Go并发模型简介Goroutines深度讲解Channels的进阶使用Select语句详解并发模型设计模式实战案例分析常见问题与解决方案 1. Go并发模型简介 Go语言以其内置的并发支持而闻名。通过轻量级的g…...

前端代码分析题(选择题、分析题)——this指向、原型链分析

this指向 普通函数&#xff1a;this 的指向由调用方式决定&#xff0c;可以是全局对象、调用该函数的对象&#xff0c;或者显式指定的对象。箭头函数&#xff1a;this 的指向在定义时确定&#xff0c;始终继承自外层函数作用域的 this&#xff0c;不会被调用方式影响。 var obj…...

react 组件应用

文章目录 react 组件react 中组件 hook 函数应用useMemo技术细节(useMemo 钩子函数和 useCallback 钩子函数)小结(依赖性数组应用) react 组件 函数式组件实例及应用场景 实例&#xff1a; 以下是一个简单的函数式组件&#xff0c;用于显示一个欢迎消息。 import React from re…...

mysql 快速解决死锁方式

mysql 快速解决死锁方式 直接寻找并终止导致死锁的具体 SQL 语句是处理死锁的一种有效方法&#xff0c;特别是在高并发环境中。以下步骤和示例展示了如何通过识别、分析和终止长时间运行的 SQL 语句来解决死锁问题。 一、识别那个导致死锁的 SQL 语句 1. 使用 SHOW ENGINE I…...

RabbitMQ 篇-深入了解 RabbitMQ 安装以及 SpringAMQP 的基础使用(声明队列和交换机、发送接收消息、配置 JSON 消息转化器)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 RabbitMQ 初识 1.1 RabbitMQ 安装 2.0 数据隔离 2.1 用户管理 2.2 virtual host 虚拟主机 3.0 SpringAMQP 3.1 RabbitMQ 配置 3.2 发送消息 3.3 接收消息 3.4 Wor…...

在 WPF 中,绑定机制是如何工作的?WPF数据绑定机制解析

在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;数据绑定机制是其核心功能之一&#xff0c;广泛用于连接应用程序的UI&#xff08;用户界面&#xff09;和应用程序的业务逻辑层。数据绑定允许你将UI元素与数据源&#xff08;如对象、集合或其他数…...

pwn学习笔记(12)--Chunk Extend and Overlapping

pwn学习笔记&#xff08;12&#xff09;–Chunk Extend and Overlapping ​ chunk extend 是堆漏洞的一种常见利用手法&#xff0c;通过 extend 可以实现 chunk overlapping&#xff08;块重叠&#xff09; 的效果。这种利用方法需要以下的时机和条件&#xff1a; 程序中存在…...

java基础面试题六集合框架

目录 1. List&#xff0c;Set&#xff0c;Map是否继承自collection接口&#xff1f; 2. 说说List,Set,Map三者的区别 3. 写出list、map、set接口的实现类&#xff0c;并说出其特点 4. 常见集合类的区别和适用场景 5. 集合的父类是谁&#xff1f;哪些安全的&#xff1f; 6…...

2024年12月一区SCI-指数-三角优化算法ETO-附Matlab免费代码

引言 本期介绍了一种基于数学概念的元启发式优化算法&#xff0c;称为指数-三角优化算法Exponential-trigonometric optimization algorithm&#xff0c;ETO。该算法基于指数函数和三角函数的复杂组合&#xff0c;于2024年12月最新发表在中JCR1区、 中科院1区 SCI期刊Computer…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...