【发布时间】:2014-01-21 13:51:59
【问题描述】:
我正在使用 ElasticSearch 的 JDBC 插件来更新我的 MySQL 数据库。它拾取新的和更改的记录,但不会删除已从 MySQL 中删除的记录。它们保留在索引中。
这是我用来创建河流的代码:
curl -XPUT 'localhost:9200/_river/account_river/_meta' -d '{
"type" : "jdbc",
"jdbc" : {
"driver" : "com.mysql.jdbc.Driver",
"url" : "jdbc:mysql://localhost:3306/test",
"user" : "test_user",
"password" : "test_pass",
"sql" : "SELECT `account`.`id` as `_id`, `account`.`id`, `account`.`reference`, `account`.`company_name`, `account`.`also_known_as` from `account` WHERE NOT `account`.`deleted`",
"strategy" : "simple",
"poll" : "5s",
"versioning" : true,
"digesting" : false,
"autocommit" : true,
"index" : "headphones",
"type" : "Account"
}
}'
在 OSX Mountain Lion 上通过 homebrew 安装了 ElasticSearch,没有错误或问题,一切都按预期响应。权限正常,日志中没有错误。
我已删除并包含(并设置为 true 和 false)我能想到的 autocommit、versioning 和 digesting 的每个组合。这是一个开发数据库,所以我确信记录被完全删除,没有缓存也没有软删除。如果我删除所有记录(即保持河流完好无损,只删除在 ES 上索引的内容),下次河流更新时不会重新添加记录,这让我相信我错过了有关版本控制和删除的一些内容.
请注意,我还尝试了各种方法来指定 _id 列,并通过 JSON on call 检查了它是否具有值。
干杯。
【问题讨论】:
-
更新 - 我们永远无法让这项工作令我们满意,最终采取了不同的方法。我们的系统现在使用事件来确定单个记录的更改并直接更新 ElasticSearch。这使我们能够对正在发生的事情进行更精细和更精细的控制,并允许从系统重新启动重新索引。抱歉,如果有人一直在寻找答案。
标签: mysql elasticsearch elasticsearch-jdbc-river