分布式全文检索引擎ElasticSearch-基本概念介绍

news/2024/12/16 0:24:02/

一、索引类型

索引,可以理解是我们的目录,看一本书的时候,可以根据目录准确快速定位到某一页,那么索引就可以帮我们快速定位到某条数据在庞大的数据表的哪一个位置。

我们常见的索引包括正排索引和倒排索引

1、正排索引

正排索引是以文档的ID为关键字,表中记录文档中每个字段的位置信息,查找时扫描表中每个文档中字段的信息直到找出所有包含查询关键字的文档

比如MySQL的B+树索引

只有叶子节点存放完整的数据,有时叶子结点也不存放,即每个节点只存放索引的字段(上图为主键id),得到了id,再根据id回表查询完整的数据,这就是正排索引的完整流程

2、倒排索引

倒排索引,是根据索引的字段内容进行统一,每个分词记录好哪些数据的索引字段有这个分词,以及这个词语出现在那段索引内容的第几个位置,获取到数据的id,根据id再拿完整数据

关于倒排索引更详细的请参考这篇文章

ElasticSearch倒排索引机制_elasticsearch采用 倒排的检索机制-CSDN博客

两种索引查找顺序

二、逻辑上的基本概念

我们类比MySQL中的概念来理解ES当中的这些专业概念

ES中的概念关系型数据库说明
索引库(indices)Databases 数据库indices是index的复数,代表许多的索引
类型(type)Table 数据表类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同,不过这会导致索引库混乱,因此未来版本中会移除这个概念
文档(document)Row 行存入索引库原始的数据,比如每一条商品信息,就是一个文档
字段(field)Columns 列文档中的属性
映射配置(mappings)表结构字段的数据类型、属性、是否索引、是否存储等特性

1、索引

一个索引相当于数据库,是多个相似文档的集合,必须要指定索引名(相当于指定要查询的数据库),才能进行搜索

一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字

它除了保存许多文档之外,还会保存倒排索引库,其中记录了每一个词项出现过的文档总数,在对应的文档中一个具体词项出现的总次数,词项在文档中的顺序,每个文档的长度,所有文档的平均长度等等相关信息。

2、类型

这个概念在较新的版本中已经摒弃,不过多介绍

3、文档

一个文档是可以被索引的一个基本单元,相当于数据库中的一条数据,索引和搜索数据的最小单位是文档

结合上面的倒排索引可以知道,倒排索引存储包含了索引文件以及数据文件

在我们查询的时候,一般使用term词项先去倒排索引库中查询到文档_id,然后根据_id去文档库中找到最初上传上去的所有文档原始内容_source,当然,前提是上传的时候有保存原始数据

倒排索引库

term词项  _id  词频、位置
term词项  _id  词频、位置
term词项  _id  词频、位置
...

文档库

_index_type_id  _version  _source_id  _version  _source_id  _version  _source...

4、字段

相当于数据库表的字段,每个字段有不同的类型

5、映射

Mapping是对处理数据时的方式和规则作出一定的限制,如字段的类型、默认值、分析器、是否被索引等,映射定义了每个字段的类型、字段所使用的分词器等。 

三、物理上的基本概念

集群

一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能

集群有哪些角色

Master节点

Master角色的主要职责是负责集群层面的相关操作,管理集群变更,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。

仅投票节点

仅投票节点用来凑数的,如果只部署了两个候选主节点,当一个节点挂掉后集群将会不可用,加入了仅投票节点则不一样,有了仅投票节点可以帮助快速选择一个主节点出来,并且仅投票节点不会选为主节点,不存储数据,所以消耗的资源也很小。

数据节点

数据节点主要是存储索引数据的节点,执行数据相关操作:CRUD、搜索,聚合操作等。

预处理节点

预处理操作运行在索引文档之前,即写入数据之前,通过事先定义好的一系列processors(处理器)和pipeline(管道),对数据进行某种转换、富化,预处理完之后,再进行索引数据落盘

仅协调节点

协调节点将请求转发给保存数据的数据节点,每个数据节点在本地执行请求,并将结果返回给协调节点。

协调节点收集完数据合,将每个数据节点的结果合并为单个全局结果,对结果收集和排序的过程可能需要很多CPU和内存资源。

所以就是分发 -> 汇总的作用

节点

一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能

和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点

分片

分片的存在是为了解决单个索引大量文档的存储问题、以及搜索是响应慢等问题。

比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间,或者单个节点处理搜索请求,响应太慢,为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片。

        将一个索引划分成了多份,每一份就称之为分片,每个分片也是一个功能完善的“索引”,这个“索引”可以被放置到集群的任意节点上,通过"分"的思想,可以突破单机在存储空间和处理性能上的限制,这是分布式系统的核心目的

至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。

副本

而对于分布式存储而言,还有一个重要特性是"冗余",因为分布式的前提是:接受系统中某个节点因为某些故障退出,为了保证在故障节点退出后数据不丢失,同一份数据需要拷贝多份存在不同节点上

副本的作用:

  • 在分片/节点故障的情况下,提供了高可用性:
            因为这个原因,注意副本分片从不与主分片置于同一节点上这一点非常重要的
  • 扩展你的搜索量/吞吐量:
            因为搜索可以在所有的副本上并行运行,总之每个索引可以被分成多个分片

segment来自于lucene,因为ES底层就是使用的lucene,一个分片包含一组segment,segment是最小的数据单元

Elasticsearch每隔一段时间产生一个新的segment,里面包含了新写入的数据,lucene的数据写入会先写如到缓存(buffer)中,当达到一定数量以后,会flush成文一个segment,写入到磁盘当中,每个segement有自己独立的索引,可以单独查询。


http://www.ppmy.cn/news/1555446.html

相关文章

算法训练(leetcode)二刷第三十五天 | *121. 买卖股票的最佳时机、*122. 买卖股票的最佳时机 II、*123. 买卖股票的最佳时机 III

刷题记录 *121. 买卖股票的最佳时机贪心*动态规划 *122. 买卖股票的最佳时机 II*123. 买卖股票的最佳时机 III *121. 买卖股票的最佳时机 leetcode题目地址 贪心 记录最低价格作为买入价格,并用当前价格减去最低价格获得利润。 时间复杂度: O ( n )…

二、pxe安装失败,交换机tcpdump dhcp数据包

在交换机上使用 tcpdump 抓取 DHCP 数据包可以帮助你监控和分析 DHCP 流量,这对于故障排除网络配置问题或了解 DHCP 服务器与客户端之间的交互非常有用。不过需要注意的是,并不是所有的交换机都支持直接运行 tcpdump,这通常是在 Linux 或类 Unix 系统上使用的命令行工具。对…

oracle 架构详解

Oracle 数据库是一个复杂且强大的关系型数据库管理系统(RDBMS),广泛应用于企业级应用中。了解 Oracle 的架构对于数据库管理员(DBA)、开发人员和架构师来说至关重要。以下是 Oracle 数据库架构的详细解析,涵…

前端有没有必要转岗?

前端开发是否有必要转岗,取决于多个因素,包括行业发展趋势、个人职业规划、技能需求变化等。‌ 前端开发的现状和挑战 前端开发在过去几年中经历了显著的变化。随着各大高校计算机专业的扩招和互联网发展的放缓,前端开发岗位的竞争变得更加…

Ubuntu安装Python3.12安装PJSUA2

Ubuntu安装Python3.12安装PJSUA2 系统版本:Ubuntu 22.04.3 LTS sudo apt install build-essential python3-dev python3-setuptools \libasound2-dev libpulse-dev libssl-dev libogg-dev libv4l-dev \libx11-dev libxv-dev libncurses5-dev libxml2-dev libsqlite…

vue3+echarts+websocket分时图与K线图实时推送

一、父组件代码&#xff1a; <template> <div class"chart-box" v-loading"loading"> <!-- tab导航栏 --> <div class"tab-box"> <div class"tab-list"> <div v-for"(item, index) in tabList…

数据结构——ST表

ST表的定义 ST表&#xff0c;又名稀疏表&#xff0c;是一种基于倍增思想&#xff0c;用于解决可重复贡献问题的数据结构 倍增思想 这里列举一个去寻找一个区间内的最大值的例子 因为每次会将将区间增大一倍&#xff0c;所以才被称之为倍增思想 &#xff0c;这种思想十分好用…

3D 视觉定位技术:汽车零部件制造的智能变革引擎

在汽车零部件制造领域&#xff0c;传统工艺正面临着前所未有的挑战。市场对于零部件精度与生产效率近乎苛刻的要求&#xff0c;促使企业寻求突破之道。而 3D 视觉定位技术&#xff0c;为汽车零部件制造开启了精准定位与智能化生产的新纪元。 3D 视觉定位系统的核心技术原理 3…