使用 ElasticSearch Bulk 动态更新和创建文档?



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

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

  • 如何使用bulk更新文档(如果存在)和创建文档(如果文档不在bulk中),而无需知道索引中是否存在。
  • 如何格式化大量JSON以运行bulk更新/创建文档bulk因为 api 希望以某种方式格式化正文。

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

并非所有 SQL 方案都能简化此操作,因此对于您的特定问题:

如何使用批量更新文档(如果存在)和创建文档(如果文档不在批量中),而无需知道索引中是否存在文档。

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

  • index
  • create
  • update
  • delete

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

每个子请求的行为都类似于与它们关联的单个选项(因此update是幕后的UpdateRequestdeleteDeleteRequestindexIndexRequest)。在create的情况下,它是index的专业化,它有效地说"如果它不存在,则添加它,但如果确实存在,则失败"。

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

您应该考虑使用 Logstash 方法或任何现有的客户端语言库,例如 Python 客户端,它们应该在 cron 中很好地工作。客户将为您处理格式。您的首选语言很可能已经存在。

最新更新