5

私の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が新しいデータを追加し、既存のデータの変更を更新したいために行われますか? テーブルのデータが静的な場合、新しいデータのみにインデックスを付けることはできますか?

4

2 に答える 2

5

デフォルトのマッピングを見ましたか? http://www.elasticsearch.org/guide/reference/mapping/dynamic-mapping.html

ここであなたを助けることができると思います。

データテーブルに挿入日付フィールドがある場合は、それを使用して、インデックスを作成する必要があるものをフィルター処理できます。https://github.com/jprante/elasticsearch-river-jdbc#time-based-selectingを参照

HTH

デビッド

于 2012-10-04T06:11:40.147 に答える