Skip to main content

Elasticsearchの使用

Elasticsearchは、データベースの上に検索機能を追加するオプションです。

このオプションにはいくつかの制限があります。

  • SQLデータベースとMongoDBでのみ動作します。CassandraとCouchbaseのサポートは将来追加される予定です(ヘルプは歓迎です!)。
  • データベースとElasticsearchの間には自動レプリケーションメカニズムがないため、データが同期していない可能性があります。その結果、データを同期するための特定のコードを記述する必要があります。たとえば、Springの@Scheduledアノテーションを使用して、毎晩実行する必要があります。
    • これはまた、データベースがアプリケーションの外部で変更された場合、検索インデックスが同期しなくなることを意味します。Elasticsearch ReindexerJHipsterモジュールは、このような状況で役立ちます。

Elasticsearchオプションが選択されている場合、以下のふるまいとなります。

  • Spring Data Elasticsearchは、Spring Bootの自動設定で使用されます。これはspring.elasticsearch.*設定プロパティを使用して設定できます。
  • "repository"パッケージには、すべてのElasticsearchリポジトリを保持する"search"と呼ばれる新しいサブパッケージができます。
  • "User"エンティティはElasticsearchでインデックス付けされ、/api/_search/users/:queryRESTエンドポイントを使用してクエリできます。
  • エンティティサブジェネレータを使用すると、生成されたエンティティはElasticsearchによって自動的にインデックス付けされ、RESTエンドポイントで使用されます。UIには検索機能も追加されているため、CRUDのメイン画面でエンティティを検索できます。

開発環境での使用

開発環境では、JHipsterは組み込みのElasticsearchインスタンスで実行されます。SPRING_DATA_URIS環境変数を設定すれば(またはspring.elasticsearch.urisプロパティをapplication-dev.ymlに追加すれば)、外部のElasticsearchインスタンスを使用することもできます。

docker-compose -f src/main/docker/elasticsearch.yml up -d

デフォルトでは、SPRING_ELASTICSEARCH_URISプロパティはapplication-dev.ymlおよびapplication-prod.yml内で、このインスタンスと通信するように設定されています。

次に、それを指す環境変数を設定します。

export SPRING_DATA_URIS=http://localhost:9200

本番環境での使用

本番環境では、JHipsterは外部Elasticsearchインスタンスを想定しています。デフォルトでは、アプリケーションはlocalhostで実行されているElasticsearchインスタンスを検索します。これは、application-prod.ymlファイルの標準のSpring Bootプロパティを使用して設定できます。

Herokuでの使用

Herokuでは、Bonsai Elasticsearchはアドオンとして設定されています。JHipsterは自動的にそれと通信するように設定されます。

残念ながら、JHipster 7.9.3の時点で、ElasticsearchはHerokuではそのままでは動作しません。これを解決するには、ElasticsearchでDockerイメージを作成して、それを実行できる場所にデプロイするか、Elastic Cloudを使用することになります。Elasticsearch Add-onは、最も安いプランが月67米ドルで少し高いように思われるため、自動的な設定は行いません。

Elastic Cloudの使用

Elastic Cloudでフリートライアルを始める ことが可能です。ログインしたらデプロイメントを作成します。デフォルト設定を使用して、バージョンとして7.17.7を選択し、Create deploymentを押します。

警告:最新バージョンを使用すると"Unable to parse response body"エラーが発生します。

次の画面から認証情報をダウンロードし、Continueをクリックします。次に、メニューからManage this deploymentを選択し、Elasticsearchエンドポイントをコピーします。

認証情報とエンドポイントURLをHerokuの新しいELASTIC_URL環境変数として設定してください。

heroku config:set ELASTIC_URL=https://elastic:<password>@<endpoint-url>

次に、heroku.gradleを変更してBonsai(動作しなくなりました)の回避策を削除し、application-heroku.ymlを更新してELASTIC_URLを使用します。

spring:
...
elasticsearch:
uris: ${ELASTIC_URL}

アプリケーションをHerokuに再デプロイすれば、すべてが期待通りに動作するはずです。