索引后Elasticsearch DELETE太快了吗?

时间:2015-06-06 19:20:19

标签: elasticsearch

我使用一个简单的脚本将MySQL表中的数据导出到ES类型。 MySQL表和ES类型之间的区别在于MySQL表包含100000个产品,其中只有500个实际使用,我需要保持ES类型清洁,以便它只保存实际使用的500个产品。

为此,每次运行导出脚本时,我都会添加一个名为' batch'的字段。对我正在编制索引的每个文档都有唯一值。让我们假设我昨天用Batch = 1运行导出,今天导出Batch = 2。 ES中的结果现在是:

Name             Batch
Document 1       2
Document 2       2
Document 3       1
Document 4       2
Document 5       2

现在我将运行一个ES查询来查找没有Batch = 2然后删除它们的所有文档。

问题是,即使我在索引后执行DELETE,ES也会删除不应删除的文档。我感觉删除操作在索引操作完成之前执行,即使我在删除操作之前发送索引操作。

也许这听起来很愚蠢,但我不知道它还能是什么......

更新我可以确认确实如此;在索引修复问题后添加命令以休眠几秒钟。但我想知道是否有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

实际上,Elasticsearch会将其称为接近实时的内容。

看一下Elasticsearch的这一部分权威性指南

https://www.elastic.co/guide/en/elasticsearch/guide/current/near-real-time.html

如果你需要" flush",你可以使用它所谓的刷新API(在同一页面中),例如:

ghc-pkg list transformers

但它有缺点。