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

news2025/5/23 21:40:26

一、什么是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.coloradmin.cn/o/2239195.html

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

相关文章

Rust开发一个命令行工具(一,简单版持续更新)

依赖的包 cargo add clap --features derive clap命令行参数解析 项目目录 代码 main.rs mod utils;use clap::Parser; use utils::{editor::open_in_vscode,fs_tools::{file_exists, get_file, is_dir, list_dir, read_file}, }; /// 在文件中搜索模式并显示包含它的行。…

Xshell,Shell的相关介绍与Linux中的权限问题

目录 XShell的介绍 Shell的运行原理 Linux当中的权限问题 Linux权限的概念 Linux权限管理 文件访问者的分类(人) 文件类型和访问权限(事物属性) 文件权限值的表示方法 文件访问权限的相关设置方法 如何改变文件的访问权…

golang 实现比特币内核:公钥的 SEC 编码格式详解

比特币作为区块链的一个应用,它建立在分布式系统之上,‘节点’遍布全球。为了使所有节点协同工作并作为一个整体系统运行,需要保持所有节点同步在相同的状态中,也就是说节点之间需要频繁通信,并且相互交换大量数据消息。这要求在网络上传输的消息或数据要使用某种格式编码…

【JAVA】使用IDEA创建maven聚合项目

【JAVA】使用IDEA创建maven聚合项目 1.效果图 2.创建父模块项目 2.1删除父模块下面的src目录以及不需要的maven依赖 3创建子模块项目 3.1右击父模块项目选择Module… 3.2创建子模块 3.3删除子模块下不需要的maven依赖 4.子模块创建完成后引入SpringBoot依赖启动项目

《Django 5 By Example》阅读笔记:p17-p53

《Django 5 By Example》学习第2天,p17-p53总结,总计37页。 一、技术总结 1.数据库迁移 python manage.py makemigrations blog python manage.py sqlmigrate blog 0001 python manage.py migrate 2.ORM Django自带ORM。 3.view (1)定义 p42, …

基于物联网的智能超市快速结算系统

摘 要 当今社会的商品层出不穷,人们因为越来越多大型仓储超市的出现使得生活更加便利,但许多随之而来的新问题也给人们带来了许多的不便,例如商家一直被更换标签不及时、货物丢失、超市内物品更换处理不及时、超市内人流高峰期人流控制不得…

阿里云Linux安装Docker服务报错问题

今天使用了阿里云99计划的服务器,之前用惯了 CentOS,这次想体验下阿里云调教的 Alibaba Cloud Linux 3 系统性能,但是在安装 docker 的时候遇到了问题! 传统安装方式 之前习惯安装docker方式: #查看是否已经安装的D…

数据结构《链表》

文章目录 前言一、什么是链表&#xff1f;二、单向链表2.1 单向链表的个人实现2.2 单向链表的例题 三、双向链表3.1 双向链表的个人实现3.2 关于真正的java中提供的链表的使用 总结 前言 提示&#xff1a;概念来源于&#xff1a;>>LinkedList<< 一、什么是链表&am…

typesScript 制作一个简易的区块链(2)

pow 机制 1.哈希函数的特点 说到 pow 机制&#xff0c;就离不开哈希函数&#xff0c;哈希函数具有以下特点&#xff1a; 输入长度不固定&#xff0c;输出长度固定输入不同&#xff0c;输出不同输入相同&#xff0c;输出相同不可逆雪崩效应 雪崩效应&#xff1a;输入变量中只…

[Codesys]常用功能块应用分享-BMOV功能块功能介绍及其使用实例说明

官方说明 功能说明 参数 类型 功能 pbyDataSrcPOINTER TO BYTE指向源数组指针uiSizeUINT要移动数据的BYTE数pbyDataDesPOINTER TO BYTE指向目标数组指针 实例应用-ST IF SYSTEM_CLOCK.AlwaysTrue THENCASE iAutoState OF0: //读写完成信号在下次读写信号的上升沿或复位信号…

【树莓派raspberrypi烧录Ubuntu远程桌面登入树莓派】

提示&#xff1a;本文利用的是Ubuntu主机和树莓派4B开发板&#xff0c;示例仅供参考 文章目录 一、树莓派系统安装下载前准备工作下载安装树莓派的官方烧录软件imagerimager的使用方法 二、主机与树莓SSH连接查看数梅派IP地址建立ssh连接更新树莓派源地址 三、主机端远程桌面配…

Linux权限和开发工具(3)

文章目录 1. 简单理解版本控制器Git1. 如何理解版本控制 2. Git的操作2.1 Git安装2.2 Git提交身份2.3 Git提交命令2.4 Git版本管理2.5 Git下的同步 3. gdb命令3.1解决gdb的难用问题3.2 gdb/cgdb的使用 1. 简单理解版本控制器Git 1. 如何理解版本控制 我们在做项目的时候可能会…

如何在 Django 中生成 Excel 文件并上传至 FastDFS

文章目录 如何在 Django 中生成 Excel 文件并上传至 FastDFS需求背景主要任务 实现步骤 创建 Excel 文件上传 Excel 文件到 FastDFSclient.conf 保存文件 URL 到数据库组合完整的流程总结 如何在 Django 中生成 Excel 文件并上传至 FastDFS 在很多实际应用场景中&#xff0c;我…

电子应用产品设计方案-3:插座式自动温控器设计

一、设计 插座式自动温控器作为一种便捷的温度控制设备&#xff0c;在日常生活和工业应用中发挥着重要作用。它能够根据环境温度的变化自动控制连接设备的电源通断&#xff0c;实现对温度的精确调节和节能控制。本设计旨在提供一种功能强大、易于使用、安全可靠的插座式自动温控…

Redis的常用命令大全

目录 一、Redis简介 1.键值型 2.NoSQL 2.1关联和非关联 2.2查询方式 2.3事务 2.4总结 二、Redis常见命令 2.1 通用命令 2.2 String 命令 2.3 Hash类型 2.4 List类 2.5 Set集合 2.6 SortedSet类型 一、Redis简介 Redis是一种键值型的NoSql数据库&#xff0c;这里…

浅谈PostGIS中的抽稀技术——实现高效空间数据可视化的关键

目录 前言 一、原始数据介绍 1、原始完整数据 2、Qgis中展示原始数据 二、减少数据精度 1、查询函数简介 2、减少精度实战 三、ST_Simplify抽稀实现 1、ST_Simplify函数介绍 2、ST_Simplify抽稀结果 四、ST_SimplifyPreserveTopology抽稀 1、函数介绍 2、抽稀结果 …

网约车管理:规范发展,保障安全与便捷

在数字化时代&#xff0c;网约车已成为城市出行的重要组成部分&#xff0c;为公众提供了前所未有的便捷性。然而&#xff0c;随着网约车行业的迅猛发展&#xff0c;一系列管理问题也随之浮现&#xff0c;如司机资质审核不严、车辆安全标准不一、乘客权益保护不足等。这些问题不…

vue3入门和实战-vue3项目布局

文章目录 前言一、项目目标二、页面布局1.首页布局分析2. 首页布局实现App.vueLayoutIndex.vueLayoutLeft.vueHome.vueHome/components/Header.vueHome/components/Footer.vue3.首页路由4.首页效果显示总结前言 上一节,部署了vue3官方案例,我们需要结合自身项目页面的布局改…

深度学习经典模型之VGGNet

1 VGGNet 1.1 模型介绍 ​ VGGNet是由牛津大学视觉几何小组&#xff08;Visual Geometry Group, VGG&#xff09;提出的一种深层卷积网络结构&#xff0c;他们以7.32%的错误率赢得了2014年ILSVRC分类任务的亚军&#xff08;冠军由GoogLeNet以6.65%的错误率夺得&#xff09;和…

【364】基于springboot的高校科研信息管理系统

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…