【问题标题】:Elasticsearch Rails Bulk indexingElasticsearch Rails 批量索引
【发布时间】:2020-05-15 01:27:35
【问题描述】:

我在 postgres 数据库中有大约 150 万数据需要重新索引。我在一个 sidekiq 工作人员中使用了 ActiveRecord 的 find_each 方法将这些对象传递给另一个为每个对象重新索引的工作人员。

worker1

# Perform in batch of 200 in 2 minutes.
type.find_each(batch_size: 200) do |object|
    Elasticsearch::Worker2.perform_in(2.minutes, :index, type, object.id, "new_index_name")
end

工人2

def index_object(object, index_name)
  object.__elasticsearch__.index_document(index: index_name)
end

但我遇到了以下问题:

[429] {"code":429,"message":"Concurrent request limit exceeded. Please consider batching your requests, or contact support@bonsai.io for help."}

有人知道如何使用 elasticsearch rails 进行批处理请求吗?

【问题讨论】:

    标签: ruby-on-rails postgresql elasticsearch sidekiq


    【解决方案1】:

    根据盆景常见问题,他们:

    我们限制并发请求的数量。实际上,这允许的每秒实际请求数取决于您正在执行的请求的速度。请求限制在不同的计划级别有所不同。我们仍在进行更改并衡量现实世界的限制,以确定合理的计划默认值。限速请求将失败,并出现 HTTP 429 错误,指示您与我们联系,以便我们与您合作以适应您的使用。 bonsai FAQ

    因此,您可以增加使用量(我猜是付费),或者您可以将请求批处理到低于每秒 1 次更新的限制,ElasticSearch 直接为您提供bulk API,这对您来说是一个不错的选择,因为你已经在使用 elasticsearch-rails gem 你可以利用集成,这篇文章有一个很好的例子,我过去用 elastic-rails 索引记录bulk_index

    【讨论】:

      猜你喜欢
      • 2016-04-16
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2016-02-12
      相关资源
      最近更新 更多