我正在想办法让我的 mysql db 和 elasticsearch db 保持同步。我已经使用jprante / elasticsearch-river-jdbc插件为 elasticsearch 设置了一个 jdbc 河。当我执行以下请求时:
curl -XPUT 'localhost:9200/_river/my_jdbc_river/_meta' -d '{
"type" : "jdbc",
"jdbc" : {
"driver" : "com.mysql.jdbc.Driver",
"url" : "jdbc:mysql://localhost:3306/MY-DATABASE",
"user" : "root",
"password" : "password",
"sql" : "select * from users",
"poll" : "1m"
},
"index" : {
"index" : "test_index",
"type" : "user"
}
}'
河流开始索引数据,但对于某些记录,我得到org.elasticsearch.index.mapper.MapperParsingException
. 好吧,这里有与此问题相关的讨论,但我想知道解决此问题的方法。
是否可以通过为我要索引的“类型”的所有“字段”创建显式映射来永久解决此问题,或者是否有更好的方法来解决此问题?
我的另一个问题是,当 jdbc-river 再次轮询数据库时,它似乎将整个数据集(在 sql 查询中给出)再次重新索引到 ES 中。我不确定,但是这样做是因为 elasticsearch 想要添加新数据以及更新现有数据中的任何更改吗?如果表的数据是静态的,是否可以只索引新数据?