0

我目前elasticsearch每 10 分钟使用并运行一次 cron 作业,该作业将从我的数据库中找到新创建/更新的数据并将其与elasticsearch. 但是,我想使用bulk同步而不是发出任意数量的请求来更新/创建索引中的文档。我正在使用由 elasticsearch 创建的 elasticsearch.js 库。

我面临两个我不确定如何处理的挑战:

  • 如何使用bulk更新文档(如果存在)并在bulk不知道文档是否存在于索引中的情况下创建文档。
  • 如何格式化大量内容JSONbulk更新/创建文档,因为bulkapi 期望正文以某种方式格式化。
4

1 回答 1

1

尝试从 SQL 数据库流式传输数据时,最好的选择是使用Logstash 的 JDBC 输入为您完成文档)。希望这可以为您完成所有工作。

并非所有 SQL 方案都能让这一切变得简单,因此对于您的具体问题:

如何使用批量更新文档(如果存在)并在不知道它是否存在于索引中的情况下创建文档(如果它不在批量中)。

Bulk 当前接受四种不同类型的子请求,它们的行为与您可能预期的来自 SQL 世界的不同:

  • index
  • create
  • update
  • delete

第一个,index,是最常用的选项。这意味着你想index(动词)向 Elasticsearch 索引(名词)添加一些东西。但是,如果它已经存在于给定相同的索引中_id,那么它将替换它。其余的可能更明显一些。

每个子请求的行为都类似于与它们相关联的单个选项(引擎盖下的updatea 、 a和a也是如此)。在 的情况下,它是 的特化,它有效地表示“如果它不存在则添加它,但如果存在则失败它”。UpdateRequestdeleteDeleteRequestindexIndexRequestcreateindex

如何格式化大量 JSON 以通过批量运行以更新/创建文档,因为批量 api 期望正文以某种方式格式化。

您应该考虑使用 Logstash 方法任何现有的客户端语言库,例如Python 客户端,它们应该在 cron 中运行良好。客户会为您处理格式。您喜欢的语言很可能已经存在。

于 2016-06-06T19:37:04.227 回答