[Bonsai 重新索引尚未解决] 当进行重新索引时,会出现错误信息:”此集群当前已有 [3000]/[3000] 个最大分片打开”

当我以为问题解决了,它却一再发生。在Qiita上有一个将内容重新设为非公开的功能,我会继续将其公开作为备忘录。如果有了解的人,请在评论中告诉我,我会非常高兴。

在Heroku和Rails的环境中使用Elasticsearch、Bonsai和Searchkick。

$ bundle exec rake searchkick:reindex CLASS=Use
# もしくは
$ bundle exec rake searchkick:reindex:all

尝试进行Reindex时出现以下错误。

this action would add [2] total shards, but this cluster currently has [3000]/[3000] maximum shards open

Shard(シャード:直译为碎片)是将索引分割的一种方式,通常作为备份,在主要的主要分片中创建副本分片。

然而,在Bonsai上显示Shard只使用了2个,而不是3000个。

スクリーンショット 2020-07-10 15.59.49.png

在其他应用程序中重新发生以解决问题的方法一。

如果您是使用「staging」的人,并且在bonsai的控制台中删除了索引并重新索引,那就很顺利。

GET /_cat/indices
# もしくは
GET /_aliased/
# でインデックス名を確認し
DELETE /posts_production_xxxxxxxx
# で一度インデックスを削除してからReindexし直す

但是如果在生产环境中尝试了同样的操作,不起作用…。无法通过删除并重新添加bonsai来解决问题,也无法通过heroku重启解决问题…。

只需要一个选项就行,用中文将以下内容进行释义:

解决方案②(但是在另一个应用程序中再次发生)

我觉得这是因为Bonsai提供的Elasticsearch版本为7.2.0,而Searchkick的最新版本依赖Gemelasticsearch的版本为7.8.0(我在Gemfile.lock中搜索elasticsearch并注意到版本为7.8.0)。

最新版本与Elasticsearch 6和7兼容。
https://github.com/ankane/searchkick#getting-started

Searchkick是一个在Bonsai上运行的搜索工具。

搜索Kick(Searchkick)的Read.me文件和Bonsai(石山)的文档中都没有提到这一点,但是否存在关联?

明确指定 Elasticsearch 版本为 7.2.0。

# Gemfile
gem 'elasticsearch', '7.2.0' # ←追加
gem 'searchkick'

当前的捆绑包中,elasticsearch版本被锁定在7.8.0。

因为被人生气了,所以我进行了 bundle update。

$ bundle update

Fetching elasticsearch-api 7.2.0 (was 7.8.0)
Installing elasticsearch-api 7.2.0 (was 7.8.0)
Fetching elasticsearch-transport 7.2.0 (was 7.8.0)
Installing elasticsearch-transport 7.2.0 (was 7.8.0)
Fetching elasticsearch 7.2.0 (was 7.8.0)
Installing elasticsearch 7.2.0 (was 7.8.0)

也许只更新特定的Gem会更好,因为其他的Gem版本也已经升级了。可以尝试使用”bundle update elasticsearch”命令。

把这个推送到Heroku并重新建立索引成功了。

$ git push heroku master
$ heroku run bundle exec rake searchkick:reindex:all

关于碎片数量

由于只是通过Heroku的管理界面安装了bonsai,所以这次没有指定复制shard。尽管判断达到最大上限3000的信息可能是错误的,但根据bonsai的文档,可能最好在模型中设置number_of_replicas。

class User < ApplicationRecord
  searchkick settings: { number_of_replicas: 0 } 
end

其他 “

也许是因为尝试通过Procfile在发布时自动执行重新索引,才导致了这个问题。还有因为进行了强制推送等操作…另外,由于在staging和production环境中解决问题的方法不同,所以这两个应用程序可能有所不同…

请提供更多的上下文或原始句子以便进行翻译。

查看shard状态的命令在这里可以参考?

bannerAds