ES内部分片处理机制——Segment

本文详细介绍了Elasticsearch中Segment的概念及其在全文搜索中的作用,讲解了逆向索引、Document、Field、Term和Token等概念。文章讨论了如何通过Segment处理数据的添加、删除和更新,以及Refresh、Flush和Translog在数据持久化中的角色,最后提到了Segment合并对性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前阵子看了一下es文档中关于shards原理的介绍,于是按照自己的理解总结了一下,基本上是照着原文翻译的,个别部分是按照自己的理解写的。

逆向索引/倒排索引:

与传统的数据库不同,在es中,每个字段里面的每个单词都是可以被搜索的。如hobby:"dance,sing,swim,run",我们在搜索关键字swim时,所有包含swim的文档都会被匹配到,es的这个特性也叫做全文搜索。

为了支持这个特性,es中会维护一个叫做“invertedindex”(也叫逆向索引)的表,表内包含了所有文档中出现的所有单词,同时记录了这个单词在哪个文档中出现过。

在Elasticsearch中, 需要搞清楚几个名词,如segment/doc/term/token/shard/index等, 其实segment/doc/term/token都是lucene中的概念。这样有助于更深入的了解和使用ES。

document: 索引和搜索的主要数据载体,对应写入到ES中的一个doc。

field: document中的各个字段。

term: 词项,搜索时的一个单位,代表文本中的某个词。

token: 词条,词项(term)在字段(field)中的一次出现,包括词项的文本、开始和结束的位移、类型等信息。

Lucene内部使用的是倒排索引的数据结构, 将词项(term)映射到文档(document)。

例如:某3个文档,假设某个字段的文本如下

ElasticSearch Server (文档1)

Matering ElasticSearch (文档2)

Apache solr 4 Cookbook (文档3)

term 次数 doc id
4 1 3
### Elasticsearch 工作原理及内部工作机制 #### 准实时特性 Elasticsearch 被称为准实时搜索工具,其原因是写入操作完成后,新数据需要大约一秒的时间才能被搜索到。这种延迟是由 Elasticsearch 的自动刷新流程引起的,在此过程中每秒会创建一个新的段[^1]。 #### 分布式架构设计 Elasticsearch 是一个分布式的搜索引擎,支持高扩展性和高性能的数据检索能力。它的核心设计理念之一是将大规模数据划分为多个分片 (shard),每个分片实际上是一个独立的 Lucene 实例,并具备完整的搜索和索引功能[^4]。这些分片可以分布在不同的节点上,从而实现负载均衡以及提高查询性能。 #### 数据处理过程概述 当用户向 Elasticsearch 提交数据时,系统首先接收该输入并将之分配给相应的分片进行存储。接着,内置的分词器会对文本内容执行分词操作,生成适合于快速查找的形式化表示形式——倒排索引结构。此同时,还会计算各个词条的重要性评分(即权重),以便后续用于排序算法中的相关度评估环节[^2]。 #### 刷新合并机制 尽管每次写入都能迅速完成,但由于存在定期触发的“refresh”动作,默认频率为每一秒钟发生一次,这期间产生的临时片段尚未完全稳定下来之前无法立即参全局范围内的查询响应活动之中[^5]。另外值得注意的是,随着时间推移不断累积的小型segment可能会造成资源浪费现象加剧,为此引入了后台优化程序来动态调整现有segments集合的状态,减少冗余开销的同时提升整体效率表现。 ```python # 示例代码展示如何简单配置 elasticsearch 客户端连接参数 from elasticsearch import Elasticsearch es_client = Elasticsearch( hosts=["http://localhost:9200"], timeout=30, ) if es_client.ping(): print("Connected to the Elastic cluster!") else: print("Could not connect to the Elastic cluster.") ``` #### 高可用性保障措施 为了增强系统的可靠性水平,除了基本读写服务之外还提供了副本(replica)复制选项供使用者灵活定制需求偏好设置情况下的灾难恢复策略规划方案考虑因素等方面的内容介绍如下所示: - **Primary Shard**: 主分片负责实际的数据存储任务; - **Replica Shards**: 复制分片作为备用保护手段存在于其他物理位置之上,一旦主分片出现问题则可以从对应关系映射表里找到最新同步过来的一份拷贝继续提供正常的服务访问体验效果达到预期目标要求标准范围内即可满足大多数应用场景的实际业务逻辑运作规律特点分析总结归纳提炼概括表达清楚明白易懂简洁明了直观形象生动具体细致全面深入透彻到位为止结束完毕完结落幕谢幕再见👋🏻👋🏼👋🏽👋🏾👋🏿
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值