簡體   English   中英

Elasticsearch Rails 批量索引

[英]Elasticsearch Rails Bulk indexing

我在 postgres 數據庫中有大約 1.5M 的數據需要重新索引。 我在一個 sidekiq worker 中使用 ActiveRecord 的 find_each 方法將這些對象傳遞給另一個為每個對象重新編制索引的 worker。

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 進行批量請求?

根據盆景常見問題解答,他們:

我們限制並發請求的數量。 實際上,這允許的每秒實際請求數取決於您正在執行的請求的速度。 請求限制因不同的計划級別而異。 我們仍在進行更改並衡量現實世界的限制以確定合理的計划默認值。 限速請求將失敗並出現 HTTP 429 錯誤,表明您聯系我們以便我們可以與您合作以適應您的使用。 盆景常見問題

所以你可以增加你的使用量(我猜是付費的)或者你可以將你的請求批處理到低於每秒 1 次更新的限制,ElasticSearch 直接為你提供了一個批量 API ,這對你來說是一個很好的選擇,因為你已經在使用您可以利用集成的 elasticsearch-rails gem,這篇文章有一個很好的示例,我過去曾使用 elastic-rails 對記錄進行索引bulk_index

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM