我当前正在使用elasticsearch
并每10分钟运行一次cron作业,该作业将从我的数据库中查找新创建/更新的数据,并将其与elasticsearch
同步。但是,我想使用bulk
进行同步,而不是发出任意数量的请求来更新/创建索引中的文档。我正在使用由elasticsearch创建的elasticsearch.js库。
我面临不确定的2个挑战:
bulk
更新文档(如果存在),以及如何创建文档(如果文档不存在于bulk
中)而又不知道索引中是否存在该文档。 JSON
以通过bulk
运行以更新/创建文档,因为bulk
api希望主体以某种方式进行格式化。 最佳答案
尝试从SQL数据库中流式传输数据时,最好的选择是使用Logstash's JDBC Input to do it for you(the documentation)。希望可以为您完成所有操作。
并非所有的SQL方案都使这变得容易,因此对于您的特定问题:
How to use bulk to update a document if it exists and create a document if it doesn't within bulk without knowing if it exists in the index.
Bulk currently accepts four different types of sub-requests,其行为与您可能预期的来自SQL世界的行为不同:
index
create
update
delete
第一个是
index
,是最常用的选项。这意味着您想对Elasticsearch索引(名词)进行index
(动词)处理。但是,如果给定相同的_id
,它已经存在于索引中,则它将替换它。其余的可能更明显。每个子请求的行为都与它们所关联的单个选项的行为相同(因此
update
是幕后的UpdateRequest
,delete
是DeleteRequest
,index
是IndexRequest
)。在create
的情况下,它是index
的一种特化,它有效地表示“如果不存在则添加它,但如果存在则失败”。How to format a large amount of JSON to run through bulk to update/create the document because bulk api expects the body to be formatted a certain way.
您应该研究使用Logstash方法还是使用任何现有的客户端语言库,例如Python client,它们都可以在cron上正常运行。客户将为您处理格式。您最喜欢的一种语言很可能已经存在。
关于elasticsearch - 使用ElasticSearch Bulk动态更新和创建文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37665008/