私のmysql dbとelasticsearch dbを同期させる方法を見つけようとしています。Elasticsearch のjprante / elasticsearch-river-jdbcプラグインを使用して、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が新しいデータを追加し、既存のデータの変更を更新したいために行われますか? テーブルのデータが静的な場合、新しいデータのみにインデックスを付けることはできますか?