elasticsearch-rails gemが先月Elasticsearch v8系に対応したv8.0.0をリリースしました。
手元にあったElasticsearch v7系を動かせるRailsアプリケーションでElasticsearch8系を動かそうとしてみたところ、いくつか変更の必要があったのでそちらを紹介します。
Elasticsearch側
いくつか設定の変更・廃止が存在します。
action.destructive_requires_name
インデックスを削除するときに、インデックス名を指定する必要があるかどうかというオプションです。
こちらは7以前からも存在するオプションですが、8系ではデフォルト値がtrueになっています。
自分は開発環境ではデータをリセットする時に、/_all
を使って消し飛ばしたかったのでfalseを明示的に指定しています。
逆に本番環境では、必要がなければtrueにしておくのが良いでしょう。
gateway.expected_nodes
クラスター内で予想されるノードの数に関するオプションですが、こちらは8系では廃止されました。
gateway.expected_data_nodes
は残っているので、必要ならこちらを利用しましょう。
gateway関係は他にも8系で廃止になっているオプションがあるので、公式ドキュメントと自身の設定を確認するのが良いでしょう。
node.max_local_storage_nodes
1インスタンス内にいくつノードを起動できるかの設定です。
こちらも8系で廃止となってしまいましたが。元々1に設定しており複雑なことはしていなかったのでelasticsearch.yml
から記述を消すのみにしています。
xpack.monitoring
Elasticsearch Monitoring プラグインを使用して監視データを収集および送信するための設定です。
こちらも8系で廃止になったのですが、そもそも利用しておらずxpack.monitoring.enabled = false
のみが記述されていたため、elasticsearch.yml
から記述を消すのみにしています。
discovery.zen.minimum_master_nodes
6系以前ではマスター適格ノード数をユーザー側で指定する必要がありましたが、7系でその必要がなくなり8系で完全に設定が削除されています。素直に設定の記述を消せばOKです。
Rails側
Elasticsearch関連の各Gemをv7からv8にすれば動きます。
例外があるとすれば、elasticsearch-transport gemがelastic-transportとして独立しました。
こちらの変更により、クラス名がElasticsearch::Transport
からElastic::Transport
に変更されています。
もしElasticsearch::Transportを直接呼び出している場合は変更しておきましょう。
def search
# 何かしらの検索処理
+ rescue Elastic::Transport::Transport::Errors::BadRequest => e
- rescue Elasticsearch::Transport::Transport::Errors::BadRequest => e
# 例外処理
end
end
まとめ
以前Qiitaの検索システムを5系から7系に上げた経験がありますが、ユーザーが頑張る必要のある変更は少なくなった印象です。