首页 > 数据库 > 数据库开发技术 > Elasticsearch 的索引结构




Elasticsearch 是基于 倒排索引(Inverted Index)原理构建的全文搜索引擎,采用分布式架构来存储和检索大规模的数据。它的索引结构由多个重要的组成部分构成,每个部分都有其特定的角色和功能。

以下是 Elasticsearch 索引结构的主要组成部分及其功能:



1. 索引(Index)




索引是 Elasticsearch 中数据的逻辑组织单位,类似于关系数据库中的数据库(Database)。每个索引都可以包含多个文档,并且由多个分片组成。一个索引包含了所有类型的数据,并且可以定义映射(mapping)来确定文档字段的数据类型和索引方式。

索引名称:
索引设置(Settings):




2. 文档
(Document)




文档是 Elasticsearch 中存储的最基本单位,类似于关系数据库中的一行记录。每个文档都是一个 JSON 格式的数据结构,可以包含多个字段(fields)。文档是由多个字段(例如 title, content, date)组成的,字段是文档的具体数据。

文档 ID:
字段(Field):




3. 分片
(Shard)




每个索引都会被分割成多个分片(Shard)。分片是 Elasticsearch 在物理存储层面上分散数据的基本单元。每个分片本质上是一个独立的 Lucene 索引,并且可以存储数据和进行搜索操作。

主分片(Primary Shard):
副本分片(Replica Shard):




4. 倒排索引
(Inverted Index)




倒排索引是 Elasticsearch 用来快速查找文本数据的核心数据结构。与传统的顺序索引不同,倒排索引首先将文档中的每个词汇(或字段)映射到包含该词汇的文档 ID,从而支持快速全文检索。

词项(Term):
倒排列表(Posting List):
倒排索引过程:
分词:
构建倒排索引:
存储倒排索引:




5. 分片副本
(Shard Replication)




为了保证高可用性,Elasticsearch 会将每个主分片复制到多个副本分片。副本分片是主分片的备份,它们与主分片的数据相同,确保在主分片宕机时系统仍然能够提供服务。

副本分片的作用:




6. 映射
(Mapping)




映射是 Elasticsearch 中的一个概念,定义了文档字段的名称和类型,并且规定了如何将字段的值转化成适合索引的格式。映射类似于关系数据库中的表结构定义。通过映射,可以控制字段的分析方式、是否存储、是否索引等属性。

字段类型(Field Type):
分析器(Analyzer):
动态映射:




7. 文档分配
(Document Routing)




文档会根据一定的规则被分配到某个分片上。默认情况下,Elasticsearch 使用文档的 _id 来计算哈希值并确定分片位置。这种方法保证了相同的文档总是存储在相同的分片上。

自定义路由(Custom Routing):




8. 字段数据
(Field Data)




字段数据是 Elasticsearch 用来支持排序、聚合和脚本功能的内存结构。当需要对某个字段进行排序或者聚合时,Elasticsearch 会加载该字段的数据到内存中,这种结构通常称为字段数据(Field Data)。对于大量数据,字段数据的存储和加载是性能优化的关键。




9. 查询处理流程



当进行查询时,Elasticsearch 会执行以下步骤:
路由(Routing):
倒排索引查找:
合并结果:




10. 聚合
(Aggregation)




Elasticsearch 支持强大的聚合功能,可以在查询时对结果进行分组、统计、排序等操作。聚合的实现通常依赖于倒排索引和字段数据。聚合的类型包括:桶聚合(Bucket Aggregation)、指标聚合(Metric Aggregation)等。




总结




Elasticsearch 的索引结构基于倒排索引,并通过分片和副本来确保分布式存储和高可用性。索引包含多个文档,每个文档由多个字段组成。字段的内容经过分析器(Analyzer)处理,最终构成倒排索引的核心部分。通过分片、副本和映射等机制,Elasticsearch 提供了高效的查询、可靠的数据存储和高可用性。

关键组件:
索引:数据的逻辑容器。
文档:数据的基本存储单元。
倒排索引:支持高效查询的核心数据结构。
分片和副本:确保数据分布和冗余备份。



👋 大家好,我是枫哥,一名Java后端开发者!我热衷于探索新技术,并在我的微信公众号上分享关于Java 生态和后端开发的知识。欢迎关注我的公众号,期待与你一起探讨技术的无穷可能!” 目前专注于Java技术分享,覆盖春招、秋招、社招和跳槽相关内容,并提供一对一带徒学习服务。加入 学徒计划,即可享受内推机会和优质资源,签订协议确保就业无忧。此外,我们还推出了‘Java跳槽网’, 为你的求职之路提供全方位支持,助你快速找到理想工作



原文作者:IT枫斗者;如有侵权,请联系管理员删除。