关于使用弹性搜索的河流和数据与生产数据库同步的问题:
河流最初只适合批量装载数据,还是以某种方式监听或监控变化。
如果我每晚导入数据,删除河流和索引,重新索引并重新创建河流会更好吗?
如果我更新或更改河流,是否必须删除并重新创建索引?
如何设置河流计划以定期获取新数据。它可以存储最后一个maxid,以便它可以在sql中进行diff查询以选择进入河流吗?
有关更好地保持数据库和弹性搜索同步的任何建议 - 不使用PUT命令调用单个索引更新功能吗?
答案 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,这样弹性将识别文档何时更改。