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/:query
RESTエンドポイントを使用してクエリできます。 - エンティティ サブジェネレータを使用すると、生成されたエンティティは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に再デプロイすれば、すべてが期待通りに動作するはずです。