我正在使用 jdbc River 来同步 Elasticsearch 和数据库。已知的问题是从数据库中删除的行仍保留在 ES 中,jdbc River 插件无法解决该问题。jdbc River的作者提出了解决问题的方法:
一个好的方法是窗口索引。每个时间范围(可能每天一次或 > 每周)都会为河流创建一个新索引,并添加到别名中。旧的 > 索引将在一段时间后被删除。此维护类似于 >logstash 索引,但它超出了河流的范围。
我的问题是,这意味着什么?
假设我在名为 table1 的数据库中有数百万行的表,我的尝试如下:
- 创建名为river1 的河流,索引为1。index1 包含 table1 的索引行。Index1 添加到别名。
- table1 中的一些行在白天被删除,所以每天晚上我都会创建另一条名为 river2 的河流,其中 index2 仅包含 table1 中现在存在的内容。
- 从别名中删除旧的 index1 并将 index2 添加到别名。
- 删除旧的 index1。
那是正确的方法吗?