我正在使用 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 上的自制软件安装 ElasticSearch,没有错误或问题,一切都按预期响应。权限正常,日志中没有错误。
我已经删除并包含(并设置为真和假)autocommit
,versioning
和digesting
我能想到的每个组合。这是一个开发数据库,所以我确信记录被完全删除,没有缓存也没有软删除。如果我删除所有记录(即保持河流完好无损,只删除在 ES 上索引的内容),下次河流更新时它不会重新添加记录,这让我相信我错过了有关版本控制和删除的一些内容.
注意我还尝试了各种方法来指定_id
列,并且我通过 JSON on call 检查了它是否具有值。
干杯。