首页 > 解决方案 > 更新文档是否会增加索引的“删除”计数?

问题描述

在弹性搜索索引中删除的文档数量方面,我面临一个奇怪的问题。数据永远不会被删除,只会插入和/或更新。虽然我可以看到文档总数在增加,但我也在 docs deleted 列中看到了一些非零值。我无法理解这个数字是从哪里来的。

我尝试阅读更新文档是否首先删除文档然后重新索引它,这样删除计数就会增加。但是,我无法获得有关此的任何信息。

我键入检查索引的命令是:

curl -XGET localhost:9200/_cat/indices

我得到的输出是:

yellow open e0399e012222b9fe70ec7949d1cc354f17369f20               zcq1wToKRpOICKE9-cDnvg 5 1 21219975 4302430  64.3gb  64.3gb

注意:它是单节点elasticsearch。

我希望知道删除文档的原因。

标签: elasticsearch

解决方案


您是正确的,更新是您看到文档删除计数的原因。

如果我们谈论 lucene,那么那里就没有更新之类的了。也可以说lucene中的文档是不可变的。

那么elastic是如何提供update的特性的呢?

它通过使用_source字段来做到这一点。因此据说_source应该启用弹性更新功能。使用更新 api 时,elastic 引用 _source 来获取所有字段及其现有值,并仅替换更新请求中发送的字段的值。它将现有文档标记为已删除,并使用更新的_source.

如果不是实际更新,这有什么好处?

  1. 它消除了应用程序的开销,即使在一小部分字段需要更新时也总是编译完整的文档。与其发送完整的文档,不如使用更新 api 仅发送需要更新的字段。休息由弹性照顾。

  2. 它减少了一些额外的网络往返,减少了有效负载大小,还减少了版本冲突的机会。

您可以在此处阅读更多更新的工作原理。


推荐阅读