三人行必有我师

elasticsearch如何增量更新

Elasticsearch | 作者 yydzcr | 发布于2017年07月20日 | 阅读数:10439

网上都属elasticsearch-jdbc,可是,显然我的mysql与elasticsearch并不统一。
我是用python从mysql读出来,再处理过后,写入文件,然后用
curl -XPOST 'localhost:9200/_bulk?pretty' -H 'Content-Type: application/json' --data-binary @filename
导入es的。请问什么办法可以做到增量更新?
谢谢大家
已邀请:

occultskyrong - 程序猿

赞同来自: jnuc093

增量跟elasticsearch-jdbc这种工具没关系吧。。。
增量需要具备两点:
1、一个能判断出某个记录被修改过的标记,version或者timestamp。
我是用的updatedAt,每次某条记录更新,这个updateAt会自动更新,记录更新时的时间戳。
2、完整的数据结构,你的每条数据都是完整的,不要用update,直接用bulk的 index方式,不判断此条记录是否存在,直接抹除已有数据。。。
 
其他的就是逻辑控制了。
我是在redis里面存储一个时间标记,然后代码全局执行两个定时任务,每30秒根据updatedAt查询下需要增量的数据,使用bulk向es里面刷数据。
中间有些复杂的判断,比如同步的时候要记录一个标记,下一次定时任务启动的时候查看是否已有标记。
同时增量的数据量过大,应该分拆bulk。。
 
 
还有个解决方案就是 kafka logstash
通过kafka收集数据,扔给logstash过滤处理,pipeline给elasticsearch。。
这个你自己搜下相关资料。。。
 
 
补充:现在用的是jdbc的方式,发现这个jdbc非常喝内存,而且莫名其妙崩溃。。。只能用shell脚本检查进程。。gg了重启。。。很蛋疼。。还是自己写逻辑靠谱。。因为SQL比较复杂。。。

luyee2010

赞同来自: occultskyrong

binlog  方式可以做到不侵入源数据库,不需要增加update_time字段 参考https://github.com/siddontang/ ... earch
 
but,go-mysql-elasticsearch貌似必须有pk字段

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

你好,请使用logstash-input-jdbc,我的博客专栏有详细论述及使用方法,博客专栏地址:http://blog.csdn.net/column/de ... .html

要回复问题请先登录注册