我使用一个简单的脚本将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也会删除不应删除的文档。我感觉删除操作在索引操作完成之前执行,即使我在删除操作之前发送索引操作。
也许这听起来很愚蠢,但我不知道它还能是什么......
更新我可以确认确实如此;在索引修复问题后添加命令以休眠几秒钟。但我想知道是否有更好的方法来解决这个问题?
答案 0 :(得分:1)
实际上,Elasticsearch会将其称为接近实时的内容。
看一下Elasticsearch的这一部分权威性指南
https://www.elastic.co/guide/en/elasticsearch/guide/current/near-real-time.html
如果你需要" flush",你可以使用它所谓的刷新API(在同一页面中),例如:
ghc-pkg list transformers
但它有缺点。