【ElasticSearch】深入了解 ElasticSearch:开源搜索引擎的力量

文章目录

  • 前言
  • 一、初识 ElasticSearch 搜索引擎
    • 1.1 ElasticSearch 的核心概念
    • 1.2 ElasticSearch 的演进历程
    • 1.3 ElasticSearch 的优势与未来
  • 二、正排索引与倒排索引:数据库与 ElasticSearch 的差异
    • 2.1 对正排索引的认识
    • 2.2 对倒排索引的认识
    • 2.3 正排索引 vs. 倒排索引
  • 三、词条词典、倒排列表、文档与索引:ElasticSearch核心概念解析
    • 3.1 倒排索引的两部分内容:词条词典和倒排列表
    • 3.2 文档
    • 3.3 索引(Index)
    • 3.4 总结与补充


前言

在信息时代,数据的增长速度之快让我们迅速感受到了信息爆炸的挑战。在这个背景下,搜索引擎成为了我们处理海量数据的得力工具之一。而 ElasticSearch 作为一款强大的开源搜索引擎,不仅能够高效地存储和检索数据,还在日志分析、实时监控等领域展现了其卓越的性能。

一、初识 ElasticSearch 搜索引擎

1.1 ElasticSearch 的核心概念

  1. 搜索引擎的精华

ElasticSearch 的主要任务包括存储、搜索和分析数据。其搜索引擎的精华在于倒排索引(Inverted Index)等高效算法。通过倒排索引,ES 能够快速响应搜索请求,实现高效的数据检索。这是其搜索能力强大的基石。

  1. Elastic Stack(ELK)

ELK 是由 Elasticsearch、Logstash、Kibana 和 Beats 组成的一整套日志管理和数据分析工具组合。Logstash 负责收集和处理日志数据,Beats 则用于轻量级的数据传输,Kibana 提供了强大的数据可视化和分析工具。ES 与其他工具的协同作用构成了强大的数据处理生态系统。

ELK Stack

1.2 ElasticSearch 的演进历程

  1. Lucene:搜索引擎的基石

在 ElasticSearch 之前,Lucene 是搜索引擎领域的重要组成部分。由 Doug Cutting 于 1999 年创建,Lucene 使用倒排索引等高效算法。然而,它仅支持 Java 开发,学习曲线陡峭,不支持水平扩展。

  1. Compass:Lucene 的扩展

为了克服 Lucene 的限制,Shay Banon 在其基础上开发了 Compass。尽管 Compass 弥补了一些缺陷,但仍无法满足日益增长的需求。

  1. ElasticSearch 的诞生

2010 年,Shay Banon 决定重新设计和实现 Compass,于是 ElasticSearch 应运而生。ES 继承了 Lucene 的优势,支持分布式架构,可水平扩展,并提供了 Restful 接口,方便被各种编程语言调用。

  1. 分布式特性的加强

ES 不断加强其分布式特性。引入了分片(Shards)的概念,将数据分割成更小的单元,每个分片可以独立运行在集群的不同节点上。这种架构使得 ElasticSearch 能够更好地处理大规模数据,并提高系统的可伸缩性和性能。

  1. 插件生态系统的形成

ES 建立起丰富的插件生态系统。这些插件可以提供各种功能,包括新的搜索算法、数据处理和可视化工具等。这使得用户可以根据自己的需求定制化 ElasticSearch,使其更加适应不同的使用场景。

  1. Logstash 和 Kibana 的整合

为了构建完整的日志处理和分析解决方案,ElasticSearch 与 Logstash 和 Kibana 进行了整合,形成了 ELK(Elasticsearch, Logstash, Kibana)堆栈。Logstash 用于数据的收集和处理,Kibana 用于数据的可视化和分析。这个整合使得 ElasticSearch 成为一个强大的日志和事件管理平台。

  1. X-Pack 的引入

为了提供更多的高级功能,ElasticSearch 引入了 X-Pack。包括安全性、监控、报告、警报等多个方面的功能。X-Pack 的引入进一步扩展了 ElasticSearch 的应用领域,使其在企业环境中更加强大和可靠。

  1. Elastic Stack 的形成

ELK 堆栈逐渐演变成 Elastic Stack,包括 Elasticsearch、Logstash、Kibana 以及 Beats(用于轻量数据传输)。这个集成的堆栈提供了一个端到端的解决方案,涵盖了数据的采集、存储、搜索、可视化等方方面面。

  1. Elasticsearch 的版本迭代

ElasticSearch 持续进行版本迭代,不断引入新的功能、性能优化和安全性增强。用户可以通过升级到最新版本来享受这些改进,同时保持其系统与时俱进。

  1. 云服务和开源社区

ElasticSearch 在云服务提供商上提供了托管服务,使用户能够更轻松地部署和管理 ElasticSearch 集群。同时,它积极参与开源社区,接受来自全球开发者的贡献,形成了一个活跃的开源生态系统。

1.3 ElasticSearch 的优势与未来

ES 的优势在于其强大的搜索能力、分布式架构和与其他工具的集成。它已经成为处理大规模数据的首选引擎之一,被广泛应用于搜索引擎、日志分析、实时监控等场景。

未来,随着数据规模的不断增长,ElasticSearch 有望继续发挥其在大数据处理领域的重要作用。同时,社区的不断贡献和开发团队的努力也将为 ElasticSearch 带来更多创新和改进,使其在搜索引擎领域持续发光发热。ES 作为搜索和分析的引擎,将继续推动数据处理领域的进步和演进。

二、正排索引与倒排索引:数据库与 ElasticSearch 的差异

在数据存储和检索领域,索引是一项关键技术,而正排索引和倒排索引是两种不同的索引结构,它们在传统数据库和 ElasticSearch 中的应用有着显著的差异。

2.1 对正排索引的认识

传统数据库的索引方式

在传统数据库中,如 MySQL,正排索引是一种常见的索引方式。它简单来说是将整个数据表按照某个字段进行排序,创建一个索引结构。例如,现在有一个商品表:

idtitleprice
1小米手机3499
2华为手机4999
3华为小米充电器49
4小米手环49

当执行搜索“手机”的 SQL 语句时,数据库会遍历每一行记录,判断是否包含“手机”关键字。这样的查询过程是线性的,需要逐行检查所有记录。正排索引适用于小规模数据,但随着数据量的增加,查询效率会下降。

select * from tb_goods where title like '%手机%'

查询数据库表的流程图:

正排索引查询流程

说明:

  • 当执行搜索“手机”的 SQL 语句的时候,会遍历数据库表中的每一条记录,判断是否包含“手机”关键字。
  • 如果包含了,则当当前数据传入结果集;
  • 如果没有包含,则丢弃当前数据;

以上就是通过正排索引的方式进行查询,通过这个查询过程我们可以发现,每次查询都会遍历整个数据表的内容,如果当数据量非常大的时候,效率就会显得非常低下了。

2.2 对倒排索引的认识

ElasticSearch 就是采用的倒排索引,这是一种更为灵活高效的索引结构,倒排索引的两个关键概念就是文档词条

  • 文档(Document): 每条数据被视为一个文档。
  • 词条(Term): 文档按语义划分成词语。

例如,针对上文的商品表的例子,经过分词处理后,生成的倒排索引如下:

词条(Term)文档 id
小米1, 3, 4
手机1, 2
华为2, 3
充电器3
手环4

此时,当我们查询“华为手机”时,ElasticSearch 只需在倒排索引中查找包含“华为”和“手机”的文档 id,然后直接定位到对应文档。这种方式大大提高了查询效率。

查询“华为手机”的流程图:

倒排索引查询流程

说明:

  • 将 “华为手机” 进行分词处理,得到 “华为” 和 “手机” 两个词条;
  • 根据这两个词条到上述的倒排索引表中去查询文档 id;
  • 然后再根据查询到的文档 id 去查询对应的文档;
  • 最后将查询到的文档存入结果集中。

这就是倒排索引,与正排索引相比,效率大大提高,每次查询不用需遍历所有的文档,只需要根据词条进行查询文档id,然后再根据文档id查询对应的文档。

2.3 正排索引 vs. 倒排索引

  • 查询效率: 正排索引需要逐行扫描,效率随数据增长而下降;倒排索引通过词条快速定位文档,查询效率更高。
  • 适用场景: 正排索引适用于小规模数据,简单查询场景;倒排索引适用于大规模数据,复杂查询场景。
  • 空间占用: 正排索引占用空间较大,随数据量线性增长;倒排索引采用压缩等技术,空间利用更为高效。

在实际应用中,ElasticSearch 作为搜索引擎,利用倒排索引构建了强大的全文搜索和分析功能,适用于处理大规模的文本数据,例如日志分析、实时监控等场景。正排索引在传统数据库中仍然发挥着重要的作用,尤其是在小规模数据和简单查询场景下。因此,选择合适的索引结构取决于数据规模、查询需求以及系统性能的考虑。

三、词条词典、倒排列表、文档与索引:ElasticSearch核心概念解析

在ElasticSearch中,理解词条词典、倒排列表、文档和索引是深入掌握其核心概念的关键。以下是对这些概念的详细解析:

3.1 倒排索引的两部分内容:词条词典和倒排列表

- **词条词典(Term Dictionary)**

词条词典是一个记录了所有词条的数据结构,同时维护了词条与倒排列表之间的关系。它实质上是一个词汇表,用于加速查询和插入操作。每个词条都会被分配一个唯一的标识符,这样在倒排列表中可以快速定位到相应的词条。

- **倒排列表(Posting List)**

倒排列表记录了每个词条在文档中的出现情况,包括文档的标识符(文档id)、词条的出现频率(TF,Term Frequency)以及词条在文档中的位置等信息。这样的设计使得在搜索过程中,可以迅速找到包含特定词条的文档。
- 文档id: 用于快速获取文档。
- 词条频率(TF): 表示文档中词条出现的次数,对搜索结果的相关性评分有重要影响。

3.2 文档

在 ElasticSearch 中,文档是基本的信息单元。每个文档对应着一条数据记录,可以是一篇文章、一条商品信息、一个用户的配置等。文档中的数据以 JSON 格式序列化存储。

例如,对于上文的商品数据表,每一行的数据都可以被序列化为一个文档:

文档示例

3.3 索引(Index)

索引是 ElasticSearch 中的一个核心概念,它是相同类型的文档的集合。每个索引都有一个唯一的名称,用于标识和检索。索引并不直接存储数据,而是存储了对文档的引用以及文档中的字段信息,同时包含了用于加速搜索的倒排索引。

例如,可以有商品索引、用户索引、订单索引,每个索引下包含了相应类型的文档:

索引示例

3.4 总结与补充

  • 正向索引 vs. 倒排索引: 正向索引是基于文档 id 创建索引,适用于小规模数据和简单查询场景。倒排索引通过分析文档内容,记录词条信息,适用于大规模数据和复杂查询场景,提高了查询效率。

  • 应用场景: ElasticSearch 的强大之处在于其面向文档的存储和全文搜索功能。通过灵活的倒排索引,可以高效地处理大量文本数据,广泛应用于日志分析、实时监控、搜索引擎等场景。

  • 映射(Mapping): 在索引中,映射定义了文档的字段以及字段的数据类型。它类似于传统数据库中表的结构约束,有助于数据的一致性和有效性。

理解这些核心概念,有助于更深入地利用 ElasticSearch 进行数据存储、检索和分析,从而充分发挥其强大的搜索引擎功能。

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

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

相关文章

【yolov系列:yolov7改进添加SIAM注意力机制】

yolo系列文章目录 文章目录 yolo系列文章目录一、SimAM注意力机制是什么?二、YOLOv7使用SimAM注意力机制1.在yolov7的models下面新建SimAM.py文件2.在common里面导入在这里插入图片描述 总结 一、SimAM注意力机制是什么? 论文题目:SimAM: A …

P1017 [NOIP2000 提高组] 进制转换

#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std;void zhuan(int n,int r) {if(n0) return ;int mn%r;//m为余数 if(m<0) m-r,nr;//如果余数小于0&#xff0c;转化为正数//将余数转化为ascll码方便输出…

土木硕设计院在职转码上岸

一、个人介绍 双非土木硕&#xff0c;98年&#xff0c;目前在北京&#xff0c;职位为前端开发工程师&#xff0c;设计院在职期间自学转码上岸&#x1f33f; 二、背景 本人于19年开始土木研究生生涯&#xff0c;研二期间去地产实习近半年(碧桂园和世茂&#xff0c;这两家的地产…

flex 布局:元素/文字靠右

前言 略 使用flex的justify-content属性控制元素的摆放位置 靠右 <view class"more">展开更多<text class"iconfont20231007 icon-zhankai"></text></view>.more {display: flex;flex-direction: row;color: #636363;justify-co…

校招秋招,性格和职业有关系吗?

企业在招聘应届毕业生时不再局限于普通的面试或者笔试&#xff0c;在互联网时代&#xff0c;为了能够更好的匹配需要的优质人才&#xff0c;企业会通过各种测试来提高招聘的准确率以及成功率。也许以前很多人都听说过性格和职业是有一定关系的&#xff0c;但是如何确定自己的性…

Go复合类型之数组类型

Go复合类型之数组 文章目录 Go复合类型之数组一、数组(Array)介绍1.1 基本介绍1.2 数组的特点 二、数组的声明与初始化2.1 数组声明2.2 常见的数据类型声明方法2.3 数组的初始化方式一&#xff1a;使用初始值列表初始化数组方法二&#xff1a;根据初始值个数自动推断数组长度方…

【C++】STL详解(十二)—— 用哈希表封装出unordered_map和unordered_set

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】STL…

阿里云ECS服务器上启动的portainer无法访问的问题

如下图&#xff0c;在阿里云ECS服务器上安装并启动了portainer&#xff0c;但是在自己电脑上访问不了远程的portainer。 最后发现是要在网络安全组里开放9000端口号&#xff0c;具体操作如下&#xff1a; 在云服务器管理控制台点击左侧菜单中的网络与安全-安全组&#xff0c;然…

黑豹程序员-架构师学习路线图-百科:Database数据库

文章目录 1、什么是Database2、发展历史3、数据库排行网4、总结 1、什么是Database 当今世界是一个充满着数据的互联网世界&#xff0c;各处都充斥着大量的数据。即这个互联网世界就是数据世界。 支撑这个数据世界的基石就是数据库&#xff0c;数据库也可以称为数据的仓库。 …

基于虚拟同步发电机控制的双机并联Simulink仿真模型

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Redis】五大数据类型 、历史概述、nosql分类

文章目录 NoSql概述NoSql年代缓存 Memcached MySQL垂直拆分&#xff08;读写分离&#xff09;分库分表水平拆分Mysql集群最近为什么要用 NoSqlNoSql的四大分类 Redis测试性能 五大数据类型keyStringSetHashZset 前言&#xff1a;本文为看狂神视频记录的笔记 NoSql概述 NoSql年…

一篇理解http协议

一、http协议。 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种在Web中广泛使用的应用层协议&#xff0c;它定义了客户端和服务器之间的通信规则&#xff0c;简化了Web应用程序的开发和交互过程。其实传输是由TCP协议完成的。 HT…

idea Springboot 图书管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 图书管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#…

[NISACTF 2022]popchains - 反序列化+伪协议

[NISACTF 2022]popchains 一、解题流程二、小小疑惑 一、解题流程 1、链条&#xff1a;Road_is_Long&#xff08;construct->wakeup【page$r】-> toString【string$m】&#xff09;-> Make_a_Change&#xff08;construct->get【effort$t】&#xff09;-> Try_W…

基于Springboot实现简历管理系统演示【项目源码+论文说明】分享

基于Springboot实现简历管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;简历系统当然也不能排除在外。简历系统是以实际运用为开发背景&#xff0c;运用软件…

想要精通算法和SQL的成长之路 - 并查集的运用和案例(省份数量)

想要精通算法和SQL的成长之路 - 并查集的运用 前言一. 并查集的使用和模板1.1 初始化1.2 find 查找函数1.3 union 合并集合1.4 connected 判断相连性1.5 完整代码 二. 运用案例 - 省份数量 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 并查集的使用和模板 先说一下并查集…

Qt之显示PDF文件

之前使用过mupdf库&#xff0c;能够成功显示pdf&#xff0c;但是我用着有BUG&#xff0c;不太理解它的代码&#xff0c;搞了好久都不行。后面又试了其他库&#xff0c;如pdfium、popler、下载了很多例程&#xff0c;都跑不起来&#xff01;后面偶然得知xpdf库&#xff0c;看起来…

蛋仔派对如何获得蛋币,蛋仔派对怎么切换账号

在蛋仔派对游戏中&#xff0c;蛋币是一种虚拟货币&#xff0c;用以购买游戏道具或提升游戏体验。以下是五种可能的获得蛋币的方式&#xff1a; 关注【娱乐天梯】&#xff0c;获取内部福利号 1. 完成挑战和任务&#xff1a;玩家可以通过完成不同类型的任务和挑战来获取蛋币。任务…

基于粒子群优化算法、鲸鱼算法、改进的淘沙骆驼模型算法(PSO/SSA/tGSSA)的微电网优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…