更新文档会增加索引的“删除”计数吗?

时间:2019-07-20 04:30:14

标签: elasticsearch

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

我尝试读取更新文档是否先删除该文档,然后重新索引它,以便通过这种方式增加删除计数。但是,我对此没有任何信息。

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

curl -XGET localhost:9200/_cat/indices

我得到的输出是:

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

注意:这是一个单节点elasticsearch。

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

1 个答案:

答案 0 :(得分:1)

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

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

那么弹性如何提供更新功能?

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

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

  1. 它消除了应用程序的开销,即使在需要更新一小部分字段的情况下,也可以始终编译完整的文档。无需发送完整的文档,而是可以使用update api发送需要更新的字段。弹性保证了休息。

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

您可以详细了解here更新的工作原理。