DrupalのSearch API入門 概要と始め方【前編】
Drupal Advent Calendar 2021 の4日目を担当します。
今年の10月に、Elasticsearchさんとウェビナーを実施し、その時に初めてSearch APIモジュールを色々触って検証していました。ウェビナーではElasticsearchに注目し、Search API自体にはあまり触れることはできなかったので、今回はSearch APIの入門記事として、ウェビナーで紹介しきれなかったSearch APIの基本操作をご紹介します。
Search APIとは?
Drupalでよく利用されているコントリビュートモジュールの1つです。Drupal 7から登場しました。DrupalコアのSearch モジュールを置き換えるものであり、Drupalで検索機能を提供するためのフレームワークとして機能します。Search APIを通じてさまざまな検索エンジンをバックエンドとして利用することができ、検索ページはViewsを介して行われます。
DrupalコアのSearchモジュールと異なり、拡張性、柔軟性に優れています。ただし複雑になりやすいという反面もあります。日本語検索はバックエンドの検索エンジンによって対応可能です。
Search APIには、Server、Indexの2つの主要な概念があります。
Serverとは
- Config エンティティ
- インデックスするアイテムが格納される場所
- データベース or 検索エンジンとの接続
- バックエンドに依存する
Indexとは
- Config エンティティ
- インデックスされるもの
- 処理の設定
- バックエンドに依存しない
検証環境の準備
まずはSearch APIを色々触るための環境を用意します。
Drupal環境の用意
DrupalのUmamiプロフィールを使用して検証します。Umamiプロフィールにはいくつかのサンプル記事が標準で用意されているので別途記事を用意する手間が省けるため、検証にもってこいなプロフィールです。
# Drupalプロジェクトの作成
$ composer create-project drupal/recommended-project drupal && cd drupal
# UmamiプロフィールでDrupalを起動
$ php -d memory_limit=256M web/core/scripts/drupal quick-start demo_umami
ブラウザで http://127.0.0.1:8888 にアクセスすると、Umamiプロフィールで起動したDrupalサイトが表示されます。
Search APIモジュールのインストールと有効化
composerコマンドでSearch APIモジュールをインストールします。
$ composer require drupal/search_api
Search API本体と、Search APIのサブモジュールとして同梱されている「Database Search」モジュールを有効化します。つまり今回はデータベースにインデックスされるようにします。
- Search API (search_api)
- Database Search (search_api_db)
これで準備は完了です。
ServerとIndexを作成してみよう
Search APIのServerとIndexを設定して、Search APIを実際に使えるようにしたいと思います。
Serverの作成
まず最初にServerを作成します。管理メニューの /admin/config/search/search-api にアクセスして + Add Server をクリックし、次のように設定します。
- Server name : Database server
- Backend : Database
- Minimum word length : 3
Indexの作成
管理メニューの /admin/config/search/search-api にアクセスして + Add index をクリックし、次のように設定します。
- Index name : Content Index
- Datasources : Content (インデックスとして追加したい、つまり検索対象としたいDrupalのデータを選択)
- Server : Database server (先ほど作成したServerを選択)
これでインデックスが作成されましたが、インデックスの設定はこれで終わりではありません。フィールドタブ、プロセッサータブに移動して、さらに細かく設定していきます。
フィールドとは
インデックス化するフィールドを追加できます。インデックスを作成しただけでは、フィールドは何も追加されていない状態ですので自分でインデックス化するフィールドを追加する必要があります。
/admin/config/search/search-api/index/content_index/fields に移動します。+ Add fields をクリックして、次のフィールドを追加していきます。
- Rendered HTML output (次の設定で、匿名ユーザーかつ指定したビューモードで表示されたレンダリング済みHTMLをFulltext型のフィールドとして登録します)
- User roles : Anonymous User
- View mode for Content » Article : Search index
- View mode for Content » Basic page : Search index
- View mode for Content » Recipe : Search index
- Content type (後のFacetsの設定で利用します)
- Tags (後のFacetsの設定で利用します)
フィールドの設定はこれで完了です。
プロセッサーとは
Drupalデータを検索サーバーにインデックスする前や、検索クエリを投げる前に何らかの処理をさせることができます。(Apache SolrやElasticsearchなど、使用する検索エンジンによっては、Search APIのプロセッサーではなく検索エンジン側で処理を行うべきものもあります。)
/admin/config/search/search-api/index/content_index/processors に移動します。次の項目にチェックを入れていきます。
- Entity status (非公開の状態のエンティティをインデックスから除外)
- Highlight (検索結果で一致した検索キーワードを強調表示するHTMLタグを追加)
- HTML filter (Fulltext型のフィールドからHTMLタグを除去)
- Ignore case (大文字と小文字を区別しない)
- Stemmer (語の語幹を取り出す処理を行う。例 : talking→talk)
- Tokenizer (テキストを個々の単語に分割)
インデックスの設定が全て終わったので、今の設定内容をインデックスに反映させます。/admin/config/search/search-api/index/content_index に移動します。Index now をクリックするとインデックス作成が開始されます。Index status のバーが100%になれば、インデックス対象のDrupalデータが全てインデックス化されたことになります。
まとめ
今回の記事ではSearch APIの概要と、重要な概念であるServerとIndexの設定までご紹介しまいstandards。少し長くなってしまったので、続きは次の記事で紹介したいと思います。
参考資料
- Building amazing searches with Search API (Youtube)
- DrupalCon 2019 での、Search APIモジュールの作者の方によるデモセッションです
- Search API (Drupal.org プロジェクトページ)
- Search API Documentation