DrupalとAmazon OpenSearch Serviceを接続する
概要
DrupalとAmazon OpenSearch Serviceを接続する機会がありましたので、その備忘録です。以下の記事が参考になりました。
モジュールのインストール
drupal/search_api
とdrupal/elasticsearch_connector
に加えて、nodespark/des-connector
をインストールする必要がありました。
(バージョンの指定方法など、改善の余地があるかもしれません。)
composer require "nodespark/des-connector:^7.x-dev"
composer require 'drupal/search_api:^1.29'
composer require "drupal/elasticsearch_connector ^7.0@alpha"
続けて、以下で有効化します。
drush pm:enable search_api elasticsearch_connector
DrupalをElasticsearchに接続する
クラスタ
以下にアクセス
/admin/config/search/elasticsearch-connector
「Add cluster」をクリックします。
そして、以下のように値を入力します。Amazon OpenSearch ServiceでBasic認証をかけている方法を前提としています。注意点として、「Server URL」に入力する値の末尾に、:443
が必要でした。
Elasticsearchサーバーへの接続が成功すると、Cluster Statusに yellow や green と表示されます。
インデックス
次に、任意の作業ですが、インデックスを作成します。「Add index」ボタンを押して、nameだけ入力してみます。結果、以下のようにインデックスが作成されました。
Search APIの設定
今度は、Search API側の設定を行います。以下にアクセスします。
/admin/config/search/search-api
サーバの追加
「Add Server」ボタンを押します。特に、BackendにElasticsearchを選択して、Clusterに先程作成したクラスタを選択します。
インデックスの追加
以下の画面には出ていませんが、「Datasources」のところで、「Content」を選択しています。また「Server」で、上記で作成したサーバを選択しています。
次に、末尾の「Save and add fields」ボタンをクリックします。
フィールドの追加
今回は最低限のフィールドとして、Titleを追加しておきます。
追加したフィールドに対するFulltext検索を可能とするために、「Type」を変更します。これらの設定は適宜変更してください。
再インデクシング
「Save changes」を押すと、以下のように、reindexingへのリンク(黄色)が表示されます。
上記のリンクをクリックして、以下にアクセスします。
/admin/config/search/search-api/index/{インデックス名}
遷移後の以下の画面下部の「Index now」などをクリックして、インデクシングを行います。
データの確認
以下のURLなどにアクセスして、Amazon OpenSearch Serviceのデータを確認してみます。インデックス名などは適宜変更してください。
https://{opensearchサーバー}/elasticsearch_index_bitnami_drupal_test_es_index/_search
以下のようにデータが登録されていることが確認できます。
{
"took": 460,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 5060,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "elasticsearch_index_bitnami_drupal_test_es_index",
"_id": "entity:node/1001:en",
"_score": 1.0,
"_source": {
"_language": "en",
"title": [
"item 940"
]
}
},
{
"_index": "elasticsearch_index_bitnami_drupal_test_es_index",
"_id": "entity:node/1002:en",
"_score": 1.0,
"_source": {
"_language": "en",
"title": [
"item 941"
]
さいごに
この後、Views機能を使った検索結果ページの作成や、ファセット検索・サジェスト機能の追加を行いたいと思いますが、長くなったのでこの記事はここまでとします。
上記の設定のあと、コンテンツを登録すると、自動的にAmazon OpenSearch Service(Elasticsearch)のインデックスも更新されました。
大量のコンテンツを高速に検索するためのソリューションとして重宝しそうです。
Discussion