如何解决如何在不影响全局searckick配置的情况下将searchkick在Rails应用程序和/或Sidekiq作业中连接到多个elasticsearch集群?
启动时,我的应用将我的(?global?)searchkick客户端指向我的默认Elasticsearch集群。
Searchkick.client = Elasticsearch::Client.new(
hosts: default_cluster,# this is the list of hosts in my default cluster
retry_on_failure: true,)
但是,我仍在升级群集,并且希望能够从该默认群集读取/搜索我的应用,
/search?q="some term"
# =>
Model.search("some term")
继续使用default_cluster
开始有些棘手的地方是:
- 我还想(通过一些特定的“ sidekiq后台作业”?)来填充备用(alt)集群的索引,例如:
Model.connect_to(alternate_cluster) {|client|
Searchkick.client = client
Model.reindex
}
不会导致所有其他后台作业与备用群集进行交互。
当然,
/admin/search?q="some search term"&cluster=alternate
# =>
Model.connect_to(alternate_cluster) {|client|
Searchkick.client = client
Model.search("some term")
}
最后:
Model.search("some term")
# =>
Model.connect_to(alternate_cluster) {|client|
Searchkick.client = client
Model.search("some term")
}
^我不要那个
FWIW,到目前为止我能想到的最好的东西是:
def self.connect_to(current_cluster,&block)
prevIoUs_es_client = Searchkick.client
current_es_client = Elasticsearch::Client.new(
hosts: current_cluster,retry_on_failure: true,)
block.call(current_es_client)
rescue Exception => e
logger.warn(e)
ensure
Searchkick.client = prevIoUs_es_client
end
但是,我怀疑这将导致系统内的所有其他交互(通过相同的web-worker或在相同的background-worker-instance中运行的其他后台作业)指向(临时)备用集群。
预先感谢您的帮助...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。