我正在遵循自述文件的排队部分,它似乎工作正常,直到我开始重新索引操作。我注意到我似乎没有得到重新索引开始后发生的新更改。例如,如果我有一个模型产品:
class Product < ApplicationRecord
searchkick callbacks: :queue
end
Product.reindex(mode: :async)
new_product = Product.create
Searchkick::ProcessQueueJob.perform_now(class_name: "Product")
new_product 未包含在新索引中
处理此问题的最佳方法是什么,以便 new_product 将包含在新索引中?
无需设置
Product.reindex(mode: :async)
当您使用 callbacks: :queue
.
作业将添加到您的
searchkick
服务器中名为 sidekiq
的队列中
您还需要配置 redis,例如:
config_redis = { host: ENV.fetch('REDIS_HOST', '127.0.0.1'), port: ENV.fetch('REDIS_PORT', 6380) }
Searchkick.redis = Redis.new(config_redis)
然后在您的服务中或您通常触发数据库修改的地方,之后您可以调用重新索引。
Searchkick::ProcessQueueJob.perform_later(class_name: "<your model name>")