我在Elasticsearch索引中删除的文档数量面临一个奇怪的问题。数据永远不会被删除,只会被插入和/或更新。虽然我可以看到文档总数正在增加,但在docs删除列中我也看到了一些非零值。我不知道这个数字是从哪里来的。
我尝试读取更新文档是否先删除该文档,然后重新索引它,以便通过这种方式增加删除计数。但是,我对此没有任何信息。
我键入的用于检查索引的命令是:
curl -XGET localhost:9200/_cat/indices
我得到的输出是:
yellow open e0399e012222b9fe70ec7949d1cc354f17369f20 zcq1wToKRpOICKE9-cDnvg 5 1 21219975 4302430 64.3gb 64.3gb
注意:这是一个单节点elasticsearch。
我希望知道删除文档的原因。
答案 0 :(得分:1)
您是正确的,因为更新是您看到文档删除计数的原因。
如果我们谈论lucene,那么那里就没有更新。也可以说lucene中的文档是不可变的。
它通过使用_source
字段来实现。因此,据说应该启用_source
才能利用弹性更新功能。使用更新api时,elastic引用_source来获取所有字段及其现有值,并仅替换更新请求中发送的字段的值。它将现有文档标记为已删除,并使用更新后的_source
为新文档建立索引。
它消除了应用程序的开销,即使在需要更新一小部分字段的情况下,也可以始终编译完整的文档。无需发送完整的文档,而是可以使用update api发送需要更新的字段。弹性保证了休息。
它减少了一些额外的网络往返,减小了有效载荷的大小,还减少了版本冲突的机会。
您可以详细了解here更新的工作原理。