保持elasticsearch和数据库同步

ser*_*403 5 lucene ruby-on-rails nosql elasticsearch

我试图找到一种方法来保持我的mysql数据库和elasticsearch数据库同步.我使用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"
}
}'
Run Code Online (Sandbox Code Playgroud)

河流开始索引数据,但对于一些记录我得到org.elasticsearch.index.mapper.MapperParsingException.那么有关于这一问题的讨论在这里,但我想知道的方式来解决这个问题.

是否可以通过为我要编制索引的"类型"的所有"字段" 创建显式映射来永久修复此问题,或者是否有更好的方法来解决此问题?

我的另一个问题是,当jdbc-river再次轮询数据库时,它似乎将整个数据集(在sql查询中给出)重新索引到ES中.我不确定,但是这样做是因为elasticsearch想要添加新数据以及更新现有数据中的任何更改吗?如果表的数据是静态的,是否可以仅索引新数据?

dad*_*net 5

你看过默认映射了吗? http://www.elasticsearch.org/guide/reference/mapping/dynamic-mapping.html

我认为它可以帮助你.

如果数据表中有插入日期字段,则可以使用它来过滤必须编制索引的内容.请参阅https://github.com/jprante/elasticsearch-river-jdbc#time-based-selecting

HTH

大卫