Ruby on rails 保持elasticsearch与数据库同步
我正试图找出一种方法来保持我的mysql数据库和elasticsearch数据库同步。我已经使用elasticsearch插件设置了一个jdbc river。当我执行以下请求时:Ruby on rails 保持elasticsearch与数据库同步,ruby-on-rails,lucene,nosql,
elasticsearch,Ruby On Rails,Lucene,Nosql,
elasticsearch,我正试图找出一种方法来保持我的mysql数据库和elasticsearch数据库同步。我已经使用elasticsearch插件设置了一个jdbc river。当我执行以下请求时: curl -XPUT 'localhost:9200/_river/my_jdbc_river/_meta' -d '{ "type" : "jdbc", "jdbc" : { "driver" : "com.mysql.jdbc.Driver", "url" : "jdbc:mysql://local
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河再次轮询数据库时,它似乎将整个数据集(在sql查询中给出)重新索引到ES中。我不确定,但这样做是因为elasticsearch希望添加新数据以及更新现有数据中的任何更改吗?如果表的数据是静态的,是否可以只为新数据编制索引?是否查看了默认映射? 我想这对你有帮助 如果datatable中有一个插入日期字段,则可以使用它筛选要索引的内容。 看 嗯
David弹性搜索已经完全放弃了河流同步的概念。这不是一个推荐的路径,因为通常在文档存储中像弹性搜索一样保持相同的规范化SQL表结构是没有意义的 比如说,您将产品作为一个具有某些属性的实体,并将产品实体上的评审作为父子表,因为评审可能在同一个表上有多个
Products(Id, name, status,... etc)
Product_reviewes(product_id, review_id)
Reviews(id, note, rating,... etc)
在文档库中,您可能希望创建一个名为“产品”的索引,其中包括产品{attribute1,attribute1,…产品评论[review1,review2,…]}
下面是在这种设置中同步的方法
假设: