2026/4/18 20:52:33
网站建设
项目流程
企业网站 下载,做网站学的什么专业,包头网站建设制作,济南大型网站制作文章目录 详细描述一下 Elasticsearch 更新和删除文档的过程#xff1f;前言一、更新文档的过程1. 更新文档的基本概念为什么需要更新文档#xff1f;更新文档的实现方式 2. 更新文档的底层机制第一步#xff1a;定位目标文档第二步#xff1a;获取旧版本的文档第三步…文章目录详细描述一下 Elasticsearch 更新和删除文档的过程前言一、更新文档的过程1. 更新文档的基本概念为什么需要更新文档更新文档的实现方式2. 更新文档的底层机制第一步定位目标文档第二步获取旧版本的文档第三步生成新版本文档第四步写入新版本文档第五步更新索引3. 更新文档的操作示例方式一直接更新方式二脚本更新二、删除文档的过程1. 删除文档的基本概念为什么需要删除文档2. 删除文档的底层机制第一步定位目标文档第二步标记文档为已删除第三步更新索引第四步异步合并3. 删除文档的操作示例三、更新与删除的对比四、总结希望这篇文章能够帮助大家更好地理解和使用 Elasticsearch 的核心功能。 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把详细描述一下 Elasticsearch 更新和删除文档的过程前言大家好我是“都叫我闫工”今天我们要聊的是 Elasticsearch 中更新和删除文档的过程。作为一个 Elasticsearch 的忠实粉丝我深知这两个操作在实际应用中的重要性。无论是电商系统、日志管理系统还是搜索引擎更新和删除文档几乎是每天都在发生的操作。不过在开始之前我想先问大家一个问题你们是不是经常觉得 Elasticsearch 很神奇但又搞不太清楚它是怎么工作的比如为什么有时候更新一个文档需要这么长时间或者删除一个文档明明成功了为什么搜索的时候还能找到这些问题是不是也曾让你抓耳挠腮别担心今天我们就来揭开 Elasticsearch 更新和删除文档的神秘面纱带大家深入了解它们的底层实现机制。放心我会尽量用简单易懂的语言辅以一些幽默的比喻让大家轻松掌握这些知识。一、更新文档的过程1. 更新文档的基本概念在 Elasticsearch 中更新文档指的是对现有文档中的某些字段进行修改或添加新字段的操作。这个操作看起来很简单但背后其实涉及了非常多复杂的流程。为什么需要更新文档在实际应用中我们经常会遇到需要更新文档的情况。比如用户修改了自己的个人信息。商品的价格发生了变化。日志系统需要记录最新的状态信息。这时候我们就需要使用 Elasticsearch 的updateAPI 来完成这些操作。更新文档的实现方式Elasticsearch 提供了两种主要的方式来更新文档直接更新通过_update端点发送一个包含新字段或修改后字段的请求。脚本更新使用 Elasticsearch 内置的脚本语言如 Painless来动态修改文档内容。接下来我们分别来看这两种方式的具体实现过程。2. 更新文档的底层机制第一步定位目标文档Elasticsearch 是一个分布式系统数据是按照分片Shard存储的。当我们要更新一个文档时首先需要找到这个文档所在的分片。Elasticsearch 使用一致性哈希算法来确定文档所属的分片。具体来说会根据文档的_id和索引的分片数量计算出目标分片。举个例子假设我们有一个索引users它有 3 个分片。当我们要更新一个文档doc_id123时Elasticsearch 会通过公式计算出这个文档属于哪个分片。第二步获取旧版本的文档定位到目标分片后接下来需要获取当前文档的内容。这里需要注意的是Elasticsearch 并不是直接在原地修改文档而是采用了一种倒排索引的机制。每次更新文档时Elasticsearch 都会生成一个新的版本version。这个新版本的文档会被写入新的分片位置而不是覆盖旧的数据。这有点像我们在写字的时候如果发现有错误不会直接在原纸上修改而是撕下一张新的纸重新写一遍。这样做虽然看起来浪费但在分布式系统中可以避免很多复杂的锁机制和一致性问题。第三步生成新版本文档获取到旧版本的文档后Elasticsearch 会根据用户的请求比如修改某个字段或新增字段生成一个新的文档内容。这个过程可能会涉及到以下操作字段更新例如将age字段从 20 改为 21。添加新字段例如在文档中新增一个email字段。删除旧字段例如移除一个已经不再需要的字段。第四步写入新版本文档生成新的文档内容后Elasticsearch 会将这个新版本的文档写入磁盘。与此同时它还会在内存中维护一份最新的文档副本以加快后续的查询速度。需要注意的是在写入过程中Elasticsearch 使用了两阶段提交机制Two-Phase Commit确保数据的一致性和可靠性。第五步更新索引最后一步是更新倒排索引。Elasticsearch 会根据新文档的内容重新构建相关的索引项并将其添加到分片的索引结构中。3. 更新文档的操作示例为了让大家更好地理解我们来一个简单的例子假设我们有一个users索引里面存储了用户信息。现在我们需要将用户id123的年龄从 20 岁更新为 21 岁。方式一直接更新使用_updateAPI 发送请求POST/users/_doc/123/_update{doc:{age:21}}方式二脚本更新如果需要动态计算字段的值可以使用 Painless 脚本POST/users/_doc/123/_update{script:{source:ctx._source.age 1,lang:painless}}二、删除文档的过程1. 删除文档的基本概念删除文档指的是从 Elasticsearch 中移除某个特定的文档。这个操作看起来很简单但实际上也有不少需要注意的地方。为什么需要删除文档在实际应用中删除文档的需求也非常常见用户删除了自己的账户。某条日志已经过期不再需要保留。某个商品已经被下架不需要再被搜索到。这时候我们就可以使用 Elasticsearch 的deleteAPI 来完成这些操作。2. 删除文档的底层机制第一步定位目标文档和更新文档类似删除文档也需要先找到目标文档所在的分片。Elasticsearch 同样会根据文档的_id和索引的分片数量计算出目标分片。第二步标记文档为已删除在 Elasticsearch 中并不会直接物理删除文档的数据。相反它会在文档上打一个删除标记tombstone表示这个文档已经被逻辑删除了。这样做有以下几个原因避免数据丢失直接删除磁盘上的数据会导致索引结构的大量重建影响性能。支持版本控制Elasticsearch 支持文档的多个历史版本删除操作只是标记当前版本为已删除。简化实现通过标记删除可以避免复杂的锁机制和一致性问题。第三步更新索引接下来Elasticsearch 会更新倒排索引移除与该文档相关的所有索引项。这意味着后续的搜索请求将不再返回这个文档。第四步异步合并为了释放磁盘空间并提高性能Elasticsearch 会在后台定期执行段合并Segment Merge操作。这个过程中标记为删除的文档会被物理移除从而释放出存储空间。3. 删除文档的操作示例同样地我们来一个简单的例子假设我们需要从users索引中删除用户id123的信息。使用_deleteAPI 发送请求DELETE/users/_doc/123三、更新与删除的对比特性更新文档删除文档操作方式修改或新增字段标记文档为已删除索引变化增加新的索引项移除旧的索引项物理存储写入新版本文档打标记不立即释放空间性能影响读写操作较多删除标记较快段合并耗时较长四、总结通过本文的讲解我们深入理解了 Elasticsearch 中更新和删除文档的具体过程。无论是从底层机制还是操作示例来看这两个操作都有其独特之处。更新文档是一个相对复杂的过程涉及到版本控制和索引重建。删除文档则更加注重性能和存储优化通过逻辑删除和异步合并来平衡资源使用。希望这篇文章能够帮助大家更好地理解和使用 Elasticsearch 的核心功能。 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把你想做外包吗闫工就是外包出身但我已经上岸了你也想上岸吗闫工精心准备了程序准备面试想系统提升技术实力闫工精心整理了1000 套涵盖前端、后端、算法、数据库、操作系统、网络、设计模式等方向的面试真题 详细解析并附赠高频考点总结、简历模板、面经合集等实用资料✅ 覆盖大厂高频题型✅ 按知识点分类查漏补缺超方便✅ 持续更新助你拿下心仪 Offer免费领取 点击这里获取资料已帮助数千位开发者成功上岸下一个就是你✨