我正在使用ElasticSearch的JDBC插件来更新我的MySQL数据库。它会拾取新的和已更改的记录,但不会删除已从MySQL中删除的记录。他们仍然在指数。ElasticSearch river JDBC 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山狮,没有任何错误或问题,安装ElasticSearch和预期都响应。权限确定,日志中没有错误。
我已经删除,并且包括(并设置为true和false)autocommit
,versioning
和digesting
的每个组合,我都能想到。这是一个开发数据库,所以我确信记录将被完全删除,不会被缓存,也不会被软删除。如果我删除所有记录(即保持河流完整,只删除ES上索引的内容),河流下次更新时不会重新添加记录,这导致我相信我错过了有关版本化和删除的内容。
注意我也尝试过各种方式来指定_id
列,并且我通过调用JSON来检查它是否有值。
干杯。
更新 - 我们永远无法使这个工作达到我们的满意度,并最终采取不同的方法。我们的系统现在使用事件来找出单个记录的更改并直接更新ElasticSearch。这使我们能够更加细致地控制正在发生的事情,并允许从系统重新启动reindex。对不起,如果有人卡住寻找答案。 –