你如何更新或同步jdbc河

时间:2014-09-11 21:17:00

标签: elasticsearch

关于使用弹性搜索的河流和数据与生产数据库同步的问题:

  1. 河流最初只适合批量装载数据,还是以某种方式监听或监控变化。

  2. 如果我每晚导入数据,删除河流和索引,重新索引并重新创建河流会更好吗?

  3. 如果我更新或更改河流,是否必须删除并重新创建索引?

  4. 如何设置河流计划以定期获取新数据。它可以存储最后一个maxid,以便它可以在sql中进行diff查询以选择进入河流吗?

  5. 有关更好地保持数据库和弹性搜索同步的任何建议 - 不使用PUT命令调用单个索引更新功能吗?

2 个答案:

答案 0 :(得分:2)

所有Elasticsearch河流都不同 - 有些是由Elasticsearch直接提供的,还有更多是由第三方开发的:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-plugins.html

每个都有不同的运作方式,所以要回答你的问题,你必须选择一条特定的河流。对于您的情况,由于您正在寻找从生产数据库中索引数据,我将假设您将使用JDBC河:

https://github.com/jprante/elasticsearch-river-jdbc

这条河将索引来自JDBC源的数据,包括获取更改。它可以按计划执行(有关此页面上的计划参数的详细文档:https://github.com/jprante/elasticsearch-river-jdbc)。但是,这条河不会被删除:

https://github.com/jprante/elasticsearch-river-jdbc/issues/213

你可能会发现这个讨论很有用,因为我每天都要建立一个新的河流/索引并使用索引别名来解决缺少删除支持的问题:ElasticSearch river JDBC MySQL not deleting records

答案 1 :(得分:0)

您可以将您的数据库中的ID映射为带别名的_id,这样弹性将识别文档何时更改。