Elasticsearch倒排索引与文档添加原理(一)

2024-04-21 18:58

本文主要是介绍Elasticsearch倒排索引与文档添加原理(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 相关文章
    • 一、 倒排索引
    • 二、segment
    • 三、 ES添加文档的流程
    • 四、 创建倒排索引(refresh)
    • 五、 flush
    • 六、文档

相关文章

一、 倒排索引

虽然你可能对倒排索引非常熟悉了,但是这里还是想重新反思一下。

思考:我们通过搜索引擎搜索一个关键字,搜索引擎怎样查找它抓取到的那些文档中包含这个关键字。

要去遍历所有文档吗?显然不现实,所以一种新的数据结构倒排索引出现。

term数据
hellodoc1-3-2-0-5,doc2-1-3-1-6
worlddoc1-3-2-0-5,doc2-1-3-1-6
Elasticsearchdoc5-3-2-0-5,doc9-1-3-1-6

如上所示,算是一个简化版本的倒排索引结构,它的数据中包含文档号、词频、位置和偏移量。

例如,上面的倒排索引显示hello这个单词:
在doc1这个文档中出现了3次,出现在第2个单词,这个单词在文档中从第0个字节开始,第5个字节结束。
在doc2这个文档中出现了1次,出现在第3个单词,这个单词在文档中从第1个字节开始,第6个字节结束。

同理,对应world、Elasticsearch以及其他关键词也一样。

这样当我们搜索hello这个单词的时候,我们可以很容易的知道哪些文档中包含有hello这个单词。当然实际情况会复杂很多,因为会有多个节点包含多个倒排索引。

在ES中我们可以通过mapping的index_option参数来控制倒排索引中包含哪些属性(文档号、词频、位置、偏移量)

二、segment

segment是ES的倒排索引,它的特别之处在于不会被修改,只会被合并和删除。

后面我们会介绍,每一次refresh都会产生一个segment,这些segment最终被保存到磁盘称为一个文件。

每一个segment都会占用文件句柄,更加重要的是每一个搜索请求都必须访问每一个segment,这就意味着存在的segment越多,消耗内存、cpu越多,搜索请求就会变的更慢。

所以,ES会在后台有一个合并segment的任务,下面是控制segment合并的一些参数:

参数说明
index.merge.policy.floor_segment默认2MB,小于该值的segment优先被合并
index.merge.policy.max_merge_at_once默认10,一次最多合并多少segment
index.merge.policy.max_merged_segment默认5GB,超过该值的segment不合并
index.merge.policy.max_merge_at_once_explicit显式调用一次最多合并多少个segment

三、 ES添加文档的流程

添加文档流程

添加文档的时候并不会直接解析,而是先添加到index-buffer,默认会一秒钟使用refresh处理一次,把文档解析为segment存放在filesystem cache中。

然而segment并不会马上写入磁盘,而是根据flush配置策略落盘,后面会详细介绍refresh与flush。

添加文档的时候另一个重要步骤就是写translog,因为文档到segment是有时间差的,并且segment也并不会马上写磁盘,所以先写translog保证数据不丢失。

当然如果translog是异步写,也可能会丢失部分数据。

translog是文件,因为顺序写,而且不出来数据,所以比较快

四、 创建倒排索引(refresh)

refresh就是将document解析为segment的过程,在ES中数据会从index-buffer到filesystem-cache的过程。

文档解析过程

refresh过程:

  1. 将index-buffer中的文档写入一个新的segment中
  2. 打开segment,以便于文档能够被搜索到
  3. 清除index-buffer中的文档

五、 flush

flush操作主要是内存中filesystem cache的segment落盘。

flush操作的流程:

  1. 将index-buffer中的文档写入一个新的segment中
  2. 清除index-buffer中的文档
  3. 往磁盘里写入commit point信息
  4. 将filesystem cache中的segment使用fsync写到磁盘
  5. 删除旧的translog文件

下面是一些控制flush操作的参数:

参数说明
index.translog.flush_threshold_ops多少次操作时执行一次flush,默认是unlimited
index.translog.flush_threshold_sizetranslog大小达到此值时flush,默认是512mb
index.translog.flush_threshold_period在该时间内至少有一次flush,默认是30m
index.translog.interval多少时间间隔内会检查一次translog大小,默认是5s

六、文档

index-buffer

translog

这篇关于Elasticsearch倒排索引与文档添加原理(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923810

相关文章

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R