elasticsearch - 更新文档是否会增加索引的“删除”计数?
问题描述
在弹性搜索索引中删除的文档数量方面,我面临一个奇怪的问题。数据永远不会被删除,只会插入和/或更新。虽然我可以看到文档总数在增加,但我也在 docs deleted 列中看到了一些非零值。我无法理解这个数字是从哪里来的。
我尝试阅读更新文档是否首先删除文档然后重新索引它,这样删除计数就会增加。但是,我无法获得有关此的任何信息。
我键入检查索引的命令是:
curl -XGET localhost:9200/_cat/indices
我得到的输出是:
yellow open e0399e012222b9fe70ec7949d1cc354f17369f20 zcq1wToKRpOICKE9-cDnvg 5 1 21219975 4302430 64.3gb 64.3gb
注意:它是单节点elasticsearch。
我希望知道删除文档的原因。
解决方案
您是正确的,更新是您看到文档删除计数的原因。
如果我们谈论 lucene,那么那里就没有更新之类的了。也可以说lucene中的文档是不可变的。
那么elastic是如何提供update的特性的呢?
它通过使用_source
字段来做到这一点。因此据说_source
应该启用弹性更新功能。使用更新 api 时,elastic 引用 _source 来获取所有字段及其现有值,并仅替换更新请求中发送的字段的值。它将现有文档标记为已删除,并使用更新的_source
.
如果不是实际更新,这有什么好处?
它消除了应用程序的开销,即使在一小部分字段需要更新时也总是编译完整的文档。与其发送完整的文档,不如使用更新 api 仅发送需要更新的字段。休息由弹性照顾。
它减少了一些额外的网络往返,减少了有效负载大小,还减少了版本冲突的机会。
您可以在此处阅读更多更新的工作原理。
推荐阅读
- python - 从消息中提取用户名模式
- c# - 使用 saga 事件对消费者中发布的消息做出反应
- node.js - NodeJS 安装在 Docker 上
- git - git pull 不更新合并分支的分支
- android - 错误:在 android studio 上更改类路径后无法解决问题
- excel - 创建一个存储库;用户从输入框输入数据,数据保存在另一张表中
- cakebuild - 如何使用#define 加载任务?
- python - Numpy减去两个ndim相等但形状不同的数组
- ios - #if canImport() 无法与 CocoaPods 一起正常工作。严重的问题
- linux - 为什么它一直向我显示exists() 错误?