我目前正在使用elasticsearch
并每隔10分钟运行一次cron作业,它会从我的数据库中找到新创建/更新的数据,并将其与elasticsearch
同步。但是,我想使用bulk
进行同步,而不是在索引中进行更新/创建文档的任意数量的请求。我正在使用elasticsearch创建的elasticsearch.js库。
我面临两个挑战,我不确定如何处理:
bulk
更新文档,如果文档不在bulk
内而不知道文档是否存在于索引中,则创建文档。JSON
以运行bulk
来更新/创建文档,因为bulk
api希望以某种方式格式化正文。答案 0 :(得分:1)
尝试从SQL数据库中流式传输数据时,最好的选择是使用Logstash's JDBC Input to do it for you(the documentation)。希望能为你做到这一切。
并非所有SQL方案都能让这一切变得简单,因此针对您的具体问题:
如果文档存在,如何使用批量更新文档,如果文档不在批量内而不知道文档是否存在于索引中,则创建文档。
Bulk currently accepts four different types of sub-requests,其行为与您可能期望来自SQL世界的行为不同:
index
create
update
delete
第一个index
是最常用的选项。这意味着你想要{Elastic}索引(名词)的index
(动词)。但是,如果它已经存在于给定相同_id
的索引中,那么它将替换它。其余的可能更明显一点。
每个子请求的行为类似于与之关联的个人选项(因此update
是一个UpdateRequest
,delete
}是DeleteRequest
,index
是IndexRequest
)。在create
的情况下,它是index
的特化,有效地说“如果它不存在则添加它,但如果确实存在则失败”。
如何格式化大量JSON以通过批量运行来更新/创建文档,因为批量api希望以某种方式格式化主体。
您应该考虑使用Logstash方法或任何现有的客户端语言库,例如Python client,这应该可以在cron中正常运行。客户将为您处理格式。一个可能已存在的首选语言。