尝试从 SQL 数据库流式传输数据时,最好的选择是使用Logstash 的 JDBC 输入为您完成(文档)。希望这可以为您完成所有工作。
并非所有 SQL 方案都能让这一切变得简单,因此对于您的具体问题:
如何使用批量更新文档(如果存在)并在不知道它是否存在于索引中的情况下创建文档(如果它不在批量中)。
Bulk 当前接受四种不同类型的子请求,它们的行为与您可能预期的来自 SQL 世界的不同:
index
create
update
delete
第一个,index
,是最常用的选项。这意味着你想index
(动词)向 Elasticsearch 索引(名词)添加一些东西。但是,如果它已经存在于给定相同的索引中_id
,那么它将替换它。其余的可能更明显一些。
每个子请求的行为都类似于与它们相关联的单个选项(引擎盖下的update
a 、 a和a也是如此)。在 的情况下,它是 的特化,它有效地表示“如果它不存在则添加它,但如果存在则失败它”。UpdateRequest
delete
DeleteRequest
index
IndexRequest
create
index
如何格式化大量 JSON 以通过批量运行以更新/创建文档,因为批量 api 期望正文以某种方式格式化。
您应该考虑使用 Logstash 方法或任何现有的客户端语言库,例如Python 客户端,它们应该在 cron 中运行良好。客户会为您处理格式。您喜欢的语言很可能已经存在。