详细描述一下Elasticsearch索引文档的过程?

大家好,我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程?】面试题。希望对大家有帮助;

详细描述一下Elasticsearch索引文档的过程?

Elasticsearch的索引文档过程是其核心功能之一,涉及将数据存储到索引中,并使其可搜索。下面我将详细描述Elasticsearch中索引文档的流程:

1. 文档(Document)

  • 文档是Elasticsearch中存储数据的基本单位,类似于数据库中的一行记录。
  • 每个文档都是一个JSON对象,包含了数据的字段和值。

2. 索引(Index)

  • 索引是存储文档的地方,可以视为一个数据库,包含多个文档。每个文档在索引中有一个唯一的标识符(ID)。
  • Elasticsearch中的索引是分片的,可以包含多个分片,每个分片又是一个Lucene索引。

3. 索引文档的流程

索引文档的过程分为几个步骤:

3.1. 接收请求
  • 当你向Elasticsearch发送一个index请求时,Elasticsearch接收到请求后,会根据请求的目标索引(index)来决定该文档存储在哪个位置。
  • 这个请求通常是一个HTTP请求,通常如下所示:
    PUT /my_index/_doc/1
    {"title": "Elasticsearch Basics","content": "Elasticsearch is a distributed search engine."
    }
    
    上述请求向my_index索引中插入一条文档,文档的ID是1,内容是titlecontent字段。
3.2. 确定目标索引和文档ID
  • 目标索引:请求中指定了文档要存入的索引(如my_index)。
  • 文档ID:如果请求中指定了ID(如上例中的1),Elasticsearch会使用该ID;如果没有指定,Elasticsearch会自动生成一个唯一的ID。
3.3. 路由和分片
  • Elasticsearch使用路由来决定将文档存储到哪个分片(Shard)。路由通常是基于文档的ID来进行计算的,默认情况下,Elasticsearch会通过MD5哈希算法对文档ID进行处理,并将结果映射到分片。
  • 这个过程确保文档在集群中的分布是均衡的。
3.4. 文档分析(Analyzing)
  • 文档中的文本字段会经过分析过程。Elasticsearch使用**分析器(Analyzer)**来将文本字段分解成多个“词条”(terms)。这些词条会用于索引和查询。
    • 分析器由字符过滤器(Character Filter)、**分词器(Tokenizer)词项过滤器(Token Filter)**组成。
    • 例如,文本"Elasticsearch Basics"会被分解为两个词条:elasticsearchbasics
  • 分析器的选择通常是在创建索引时配置的,默认分析器通常是standard分析器。
3.5. 创建Lucene文档
  • 分析后的词条会被存储为Lucene文档的倒排索引(Inverted Index)的一部分。Lucene倒排索引将每个词条映射到包含该词条的文档ID列表中。
  • 这些词条在Elasticsearch中是可以搜索的关键元素。
3.6. 存储原始文档(_source字段)
  • 在索引文档时,Elasticsearch通常会将原始的JSON文档(即_source字段)存储起来。这样,当进行搜索时,用户可以检索到原始数据。
  • _source字段是文档的原始内容,不经过分析和转换,保留完整的原始结构。
3.7. 分配文档到分片
  • 文档经过路由后被分配到集群中的某个具体的分片(Shard)。分片的数量在创建索引时设置,并且每个分片可以被多个节点(Node)存储。
  • 每个文档的倒排索引会被存储在Lucene的分片索引中。
3.8. 更新和刷新
  • Elasticsearch的倒排索引是通过写入**事务日志(translog)**来进行更新的,事务日志确保了写操作的可靠性。在写入后,数据不会立即对外可见。
  • **刷新(refresh)**操作将事务日志的数据更新到倒排索引中,使得索引变得可搜索。
    • 刷新是定期进行的,但也可以通过_refreshAPI手动触发。
  • 每个分片会有一个独立的刷新周期,通常会在每个分片每隔一段时间进行一次刷新。
3.9. 成功索引
  • 当文档成功被索引后,Elasticsearch返回一个响应,告知用户索引成功。
  • 响应通常包含文档ID、索引名称、分片位置和版本号等信息。

      

{"_index": "my_index","_id": "1","_version": 1,"_shards": {"total": 1,"successful": 1,"failed": 0},"result": "created","_seq_no": 0,"_primary_term": 1
}
3.10. 数据的最终存储
  • 文档经过索引和刷新后,它的倒排索引和原始文档(_source)数据被持久化存储。
  • Elasticsearch会定期清理无用的文档和版本,通过合并(merge)过程来减少索引的碎片。

4. 索引的状态

  • 索引文档后的数据会进入搜索引擎的活跃状态。用户可以通过查询(search)请求来检索这些文档。
  • 如果在文档索引后有更新操作(如updatedelete),Elasticsearch会根据文档ID来执行这些操作,而这些操作最终会更新倒排索引。

总结

Elasticsearch索引文档的过程包括以下主要步骤:

  1. 接收索引请求。
  2. 确定目标索引和文档ID。
  3. 计算路由,将文档分配到对应的分片。
  4. 对文档中的文本字段进行分析,生成倒排索引。
  5. 存储原始文档(_source字段)。
  6. 执行更新和刷新操作,使文档可以被搜索。
  7. 最终,文档存储在索引的分片中,等待查询。

这些步骤结合了数据分片、路由、分析、索引和存储,确保Elasticsearch能够高效地存储和查询海量数据。

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

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

相关文章

03 —— Webpack 自动生成 html 文件

HtmlWebpackPlugin | webpack 中文文档 | webpack中文文档 | webpack中文网 安装 npm install --save-dev html-webpack-plugin 下载html-webpack-plugin本地软件包 npm i html-webpack-plugin --save-dev 配置webpack.config.js让webpack拥有插件功能 const HtmlWebpack…

如何控制自己玩手机的时间?两台苹果手机帮助自律

对一些人来说,被智能手机“绑架”是一件心甘情愿的事,和它相处的一天中,不必面对现实的压力,它就像个“舒适区”。这是因为在使用手机的过程中,应用程序(尤其是游戏和社交媒体应用)会不断刺激大…

解决“400 Bad RequestThe plain HTTP request was sent to HTTPS portnginx/1.23.1”

目录 一、问题描述 二、问题解决 三、问题原因 (1)问题成因 (2)那为什么访问其他网站的时候,其不会出错呢?而且自己会用https协议? 一、问题描述 在浏览器直接输入:“xxx.xxx.x…

有趣的跳马问题与最优路径

献给皮鞋👞经理 有一个无限大的棋盘,在某个点有一个只能走日的马,计算马到达棋盘上任意一个点 P(x, y) 最小步数。 “走日” 规则下,任意坐标的 “马” 是否可达任意其它坐标需要证明。按照递归原则,只需证明 “马” …

IDEA自定义文件打开格式

介绍在IDEA中自定义文件打开格式的方法,比如一个文件,可以选择用txt格式打开,也可以选择用xml格式打开,也可以用java格式打开等等,通过这个方法可以方便的用任意格式在idea中打开想要打开的文件。 下面分别讨论三种不…

百度智能云千帆大模型平台引领企业创新增长

本文整理自百度世界大会 2024——「智能跃迁 产业加速」论坛的同名演讲。 更多大会演讲内容,请访问: https://baiduworld.baidu.com 首先,跟大家分享一张图,这个是我们目前大模型应用落地的场景分布。可以看到,大模型…

【蓝桥杯C/C++】翻转游戏:多种实现与解法解析

博客主页: [小ᶻZ࿆] 本文专栏: 蓝桥杯C/C 文章目录 💯题目💯问题分析解法一:减法法解法二:位运算解法解法三:逻辑非解法解法四:条件运算符解法解法五:数组映射法不同解法的比较…

第二十一章 Spring之假如让你来写AOP——Weaver(织入器)篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

04 - Clickhouse-21.7.3.14-2单机版安装

目录 一、准备工作 1、确定防火墙处于关闭状态 2、CentOS 取消打开文件数限制 3、安装依赖 4、CentOS取消SELINUX 二、单机安装 2.1、下载安装 2.2、安装这4个rpm包 2.3、修改配置文件 2.4、启动服务 2.5、关闭开机自启 2.6、使用Client连接server 一、准备工作 1…

Python脚本-linux远程安装某个服务

需求: 某公司因为网站服务经常出现异常,需要你开发一个脚本对服务器上的服务进行监控;检测目标服务器上是否存在nginx软件(提供web服务的软件),如果不存在则安装(服务器可能的操作系统Ubuntu24/RedHat9);如果nginx软件…

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号) 本期是平台君和您分享的第113期内容 前一段时间,高通公司(Qualcomm)发布安全警告称,提供的60多款芯片潜在严重的“零日漏洞”,芯片安全再一次暴露在大众视野。 那什么是“零日漏洞”?平台君从网上找了一段…

x-cmd mod | x pixi - 兼容 Conda 生态的极速包管理器,conda 和 mamba 用户的另一选择

目录 介绍使用语法参数子命令 介绍 x pixi 模块是由 x-cmd 团队使用 posix shell 实现的 pixi 命令增强工具。它能优化 pixi 命令的安装和使用体验,具体如下: 提供带有 advise 的自动补全功能。对于中国区用户,我们还提供了汉化版的 advise…

Rust derive macro(Rust #[derive])Rust派生宏

参考文章:附录 D:派生特征 trait 文章目录 Rust 中的派生宏 #[derive]基础使用示例:派生 Debug 派生其他常用特征示例:派生 Clone 和 Copy 派生宏的限制和自定义派生自定义派生宏上面代码运行时报错了,以下是解释 结论…

Node.js | npm下载安装及环境配置教程

前言: npm 是 Nodejs 下的包管理器,在下载 Node.js 后自动安装,因此本文同时适合 Node.js / npm 的下载安装及环境配置。 一、软件安装 Node.js中文网官网下载页:Node.js 中文网 (nodejs.com.cn) 1)进入下载页&#xf…

pytorch奇怪错误

ValueError: At least one stride in the given numpy array is negative, and tensors with negative strides are not currently supported. (You can probably work around this by making a copy of your array with array.copy().) 今天在这里遇到了一个奇怪的bug impor…

EDA实验设计-led灯管动态显示;VHDL;Quartus编程

EDA实验设计-led灯管动态显示;VHDL;Quartus编程 引脚配置实现代码RTL引脚展示现象记录效果展示 引脚配置 #------------------GLOBAL--------------------# set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" set_…

151页PDF | XX集团数字化转型SAP项目规划方案(限免下载)

一、前言 这份报告是XX集团数字化转型SAP项目规划方案,该报告涵盖了集团战略解读、管理痛点分析、信息化建设目标、整体架构方案、实施策略、SAP系统价值和预期收益,旨在通过数字化推动集团运营模式变革,实现降本增效和价值创新。 《XX集团…

共建智能软件开发联合实验室,怿星科技助力东风柳汽加速智能化技术创新

11月14日,以“奋进70载,智创新纪元”为主题的2024东风柳汽第二届科技周在柳州盛大开幕,吸引了来自全国的汽车行业嘉宾、技术专家齐聚一堂,共襄盛举,一同探寻如何凭借 “新技术、新实力” 这一关键契机,为新…

在 cmd 输入 python.exe 后不报错也无反应的问题

在 cmd 输入 python.exe 后不报错:‘python.exe ’不是内部或外部命令,也不是可运行的程序或批处理文件,也无反应。只是显示这样一个弹窗: 查了下环境变量path,看看有什么地方有python.exe,发现原来在C:\Us…

算法日记 30 day 动态规划(背包问题)

今天是动态规划的另一个大类,背包问题。 背包问题的分类 这张图中涵盖了我们能遇到的绝大部分背包问题。 首先是01背包问题 01背包问题 01背包问题:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value…