2

我正在使用jdbc河来同步Elasticsearch和数据库。已知的问题是,从数据库中删除的行保留在ES中,jdbc河插件不能解决这个问题。 jdbc river的作者提出了解决问题的方法:Elasticsearch数据库同步

一个好方法是窗口索引。每个时间范围(可能每天或每周一次)为河流创建一个新索引,并添加到别名中。过了一段时间后,旧指数将会下跌。这种维护类似于> logstash索引,但它不在河流范围内。

我的问题是,这是什么意思准确的方式?

可以说我有表中的数据库调用Table有600万行,我试试如下:

  1. 创建河叫river1,与指数1。 index1包含table1的索引 行。索引1被添加到别名。
  2. table1中的某些行在白天被删除,因此每天晚上我会创建另一条名为river2的河流,其索引为2,其中 仅包含table1中现在存在的内容。
  3. 从别名中删除旧的索引1并将索引2添加到别名。
  4. 删除旧的index1。

这是正确的方法吗?

回答

0

是的,它可以使用_ttl场完成,但我使用脚本它解决。

每晚的脚本都以索引表格开始,并创建当天的索引。索引可以持续数小时。

另一个脚本周期性地从localhost:9200/_river/jdbc/*/_state?pretty读取输出并检查是否所有河流都已完成(通过检查lastEndDate字段的存在)。当所有的河流完成后,别名会被新创建的索引刷新。旧索引被删除。