OpenSearch Service への移行にあたり、同一コードで OpenSearch と(現行の)Elasticsearch 7 系の基本操作が通るかを検証する最小構成です。
-
- 使用クライアント Gem: elasticsearch 7.13.3, elasticsearch-model 7.2.0, elasticsearch-rails 7.2.0, elasticsearch-dsl
- 依存のインストール
bundle install
bundle exec rails db:prepare # SQLite の DB を用意(Article モデルで使用)- バックエンド起動(両方)
spec では Elasticsearch / OpenSearch の両方に接続して同一結果になることまで検証します。ローカルでは以下のいずれかで 19200/29200 ポートに起動してください。
-
簡易手順:
./bin/test_backends(起動→プラグイン導入→テスト実行まで自動) -
手動起動例:
docker run -d --name es7 -p 19200:9200 \ -e discovery.type=single-node \ -e xpack.security.enabled=false \ -e ES_JAVA_OPTS='-Xms512m -Xmx512m' \ docker.elastic.co/elasticsearch/elasticsearch:7.1.1 docker exec es7 /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch analysis-kuromoji docker restart es7 docker run -d --name os3 -p 29200:9200 \ -e discovery.type=single-node \ -e plugins.security.disabled=true \ -e DISABLE_INSTALL_DEMO_CONFIG=true \ -e OPENSEARCH_JAVA_OPTS='-Xms512m -Xmx512m' \ opensearchproject/opensearch:3.1.0 docker exec os3 /usr/share/opensearch/bin/opensearch-plugin install --batch analysis-kuromoji docker restart os3
- テスト実行
# ES_URL / OS_URL を指定して 1 回の RSpec 実行で全テストを網羅
ES_URL=http://127.0.0.1:19200 OS_URL=http://127.0.0.1:29200 \
ELASTICSEARCH_URL=http://127.0.0.1:19200 bundle exec rspec --format documentation.github/workflows/ci.yml で Elasticsearch / OpenSearch を起動し、bundle exec rspec を 1 度だけ実行して全テスト(バックエンド比較含む)をカバーします。
- クライアント初期化は
config/initializers/elasticsearch.rb。ELASTICSEARCH_URL(デフォルトhttp://127.0.0.1:9200)で接続先を切替。 - モデルは
app/models/article.rbを使用(elasticsearch-model連携、index_name/settings/mappingsを定義)。 - テスト(
spec/elasticsearch_compat_spec.rb)は次を確認します:- 既存インデックス削除 → 設定/マッピング付きで再作成 →
refresh - ActiveRecord で
Articleを作成 →importで取り込み →refresh elasticsearch-dslでmatchクエリを構築し、Article.search(モデル経由)とclient.search(低レベル)でヒット数 ≥ 1 を確認
- 既存インデックス削除 → 設定/マッピング付きで再作成 →
必要に応じて、インデックス設定/マッピングなどの追加ケースを増やせます(最小構成のままにしています)。