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

标签 elasticsearch elasticsearch-2.0

我当前正在使用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是幕后的UpdateRequestdeleteDeleteRequestindexIndexRequest)。在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/

    相关文章:

    elasticsearch - 如何在NEST(Elasticsearch)中使用表达语法进行查询?

    elasticsearch - 将可重用字段类型添加到 elasticsearch

    elasticsearch - ElasticSearch中的子查询

    elasticsearch - spring-data-elasticsearch-2.0.4.RELEASE startsWith不适用于非分析字段

    python - 来自 Python 应用程序的 ElasticSearch/Kibana 中的地理点数据

    python - Django 表单操作属性无法正常工作

    java - Elasticsearch-术语聚合嵌套字段

    Elasticsearch,嵌套对象的存在过滤器不起作用

    elasticsearch - Elasticsearch批量加载奇怪地丢失了3个文档中的1个

    php - 使用嵌套字段进行多索引搜索