首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Searchkick异步更新

Searchkick异步更新
EN

Stack Overflow用户
提问于 2018-02-14 09:02:53
回答 1查看 1.6K关注 0票数 3

我开始使用searchkick来连接elasticsearch,并且在后台作业中遇到了索引更新问题。我在文档中做了所有的例子,但是搜索任务只能在重新启动回齐后才会累积和执行,而在执行之后,任务会在没有执行的情况下再次收集。下面是代码。

这里是我的searchkick.rb初始化器

代码语言:javascript
复制
Searchkick.client =
  Elasticsearch::Client.new(
    url: 'remote_ip:9200',
    retry_on_failure: true,
    transport_options: { request: { timeout: 250 } }
)

Searchkick.redis = ConnectionPool.new { Redis.new }

我的模型的一部分

代码语言:javascript
复制
after_commit  :searchkick_indexing

searchkick callbacks: :queue, index_name: :my_index_name

def search_data
  {
    title: title,
    description: description
  }
end

private

def searchkick_indexing
  Searchkick::ProcessQueueJob.perform_later(class_name: "model_name")
end

此外,我还将searchkick队列添加到sidekiq.yml中。如何总是在不重新启动的情况下执行搜索任务?提前感谢?

EN

回答 1

Stack Overflow用户

发布于 2021-12-16 17:27:08

试试Searchkick自述上列出的这些步骤--

假设你有Redis来存储你的工作。

将其添加到模型中,以指示Searchkick需要在后台异步地进行重新索引。

代码语言:javascript
复制
searchkick callbacks: :queue

然后在您的sidekiq.yml中,设置队列优先级,如下所示,用于对作业进行排序-

代码语言:javascript
复制
###sample sidekiq.yml file
:concurrency: 5
:queues:
  - [searchkick, 2]
  - [mailers, 1]
  - [carrierwave, 1]
  - [default, 2]
staging:
  :concurrency: 10
production:
  :concurrency: 20
:logfile: ./log/sidekiq.log

bundle exec sidekiq -C config/sidekiq.yml重新启动sidekiq

或为领班安装Procfile以启动多个进程,如-

代码语言:javascript
复制
#sample Procfile

web: bundle exec rails server
sidekiq: bundle exec sidekiq -C config/sidekiq.yml
webpack: ./bin/webpack-dev-server

有了工头,你可以用一种方式运行所有这些命令,比如-

bundle exec foreman start

这应该对你有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48783201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档