        ![Digital Commerce and Search](/sites/default/files/styles/blog_hero_image_mobile/public/media/image/2021-04/digitalsearch.jpg?itok=f41SqcAq) 

 

 

 Image

        ![](/sites/default/files/styles/post_content_attribution_headshot/public/legacy/images/2019-10/hikaru_4.jpg?itok=Rjs7mpHp) 

 

 

 

 [丸山 ひかる](/jp/about-us/team/hikaru-maruyama) テクニカルトランスレーター Acquia

 

 

 

 

 



# DrupalのSearch API入門 概要と始め方【前編】

 March 17, 2022 2 分で読めます

 [Share this blog post on LinkedIn

 ](https://www.linkedin.com/sharing/share-offsite/?url=https://www.acquia.com/index%2ephp/jp/markdownify/node/29356) [Share this blog post on Twitter

 ](<https://twitter.com/intent/tweet?text=DrupalのSearch API入門 概要と始め方【前編】&url=https://www.acquia.com/index%2ephp/jp/markdownify/node/29356&via=acquia>) [Share this blog post via Email

 ](<mailto:?subject=DrupalのSearch API入門 概要と始め方【前編】&body=https://www.acquia.com/index%2ephp/jp/markdownify/node/29356>) 

 

 Search APIの入門記事として、Search APIの基本操作をご紹介します。 

        ![Digital Commerce and Search](/sites/default/files/styles/blog_hero_image_mobile/public/media/image/2021-04/digitalsearch.jpg?itok=f41SqcAq) 

 

 

[Drupal Advent Calendar 2021](https://qiita.com/advent-calendar/2021/drupal) の4日目を担当します。

今年の10月に、[Elasticsearchさんとウェビナー](https://www.acquia.com/jp/blog/intergration-with-drupal-and-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

Image

 ![introduction to search api](/sites/default/files/styles/wysiwyg_full_no_crop_/public/media/image/2021-12/Screen%20Shot%202021-12-05%20at%2018.25.07.png?itok=gOzIK174)

 



### 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の設定で利用します)

  
フィールドの設定はこれで完了です。

Image

 ![search api module](/sites/default/files/styles/wysiwyg_full_no_crop_/public/media/image/2021-12/Screen%20Shot%202021-12-08%20at%209.53.30.png?itok=Lr3WeGKF)

 



**プロセッサーとは**

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データが全てインデックス化されたことになります。

Image

 ![introduction to search api](/sites/default/files/styles/wysiwyg_full_no_crop_/public/media/image/2021-12/Screen%20Shot%202021-12-05%20at%2019.12.00.png?itok=2ZDCKpOR)

 



## まとめ

今回の記事ではSearch APIの概要と、重要な概念であるServerとIndexの設定までご紹介しまいstandards。少し長くなってしまったので、続きは次の記事で紹介したいと思います。

- [DrupalのSearch API入門 検索画面の作成と拡張モジュールの使用【後編】](/index%2ephp/jp/blog/introduction-to-search-api-2 "DrupalのSearch API入門 検索画面の作成と拡張モジュールの使用【後編】")

## 参考資料

- [Building amazing searches with Search API (Youtube)](https://www.youtube.com/watch?v=e5-3RZkKFOQ)
    - DrupalCon 2019 での、Search APIモジュールの作者の方によるデモセッションです
- [Search API (Drupal.org プロジェクトページ)](https://www.drupal.org/project/search_api)
- [Search API Documentation](https://www.drupal.org/docs/contributed-modules/search-api)



 

 Image

        ![](/sites/default/files/styles/post_content_attribution_headshot/public/legacy/images/2019-10/hikaru_4.jpg?itok=Rjs7mpHp) 

 

 

 

 [丸山 ひかる](/index%2ephp/jp/about-us/team/hikaru-maruyama) テクニカルトランスレーター Acquia

 

 

 

 

 

 [Share this blog post on LinkedIn

 ](https://www.linkedin.com/sharing/share-offsite/?url=https://www.acquia.com/index%2ephp/jp/markdownify/node/29356) [Share this blog post on Twitter

 ](<https://twitter.com/intent/tweet?text=DrupalのSearch API入門 概要と始め方【前編】&url=https://www.acquia.com/index%2ephp/jp/markdownify/node/29356&via=acquia>) [Share this blog post via Email

 ](<mailto:?subject=DrupalのSearch API入門 概要と始め方【前編】&body=https://www.acquia.com/index%2ephp/jp/markdownify/node/29356>) 

 

 

 

## 関連記事

 [全て表示する](/index%2ephp/jp/resources) 

  [Image

        ![intergration with elasticsearch](/sites/default/files/styles/card_tablet/public/media/image/2021-10/Screen%20Shot%202021-10-17%20at%2011.32.43.png?h=9580ed98&itok=uFKJRTMn) 

 

 

 

 Blog Article 2 分 

######  Elasticsearch × Drupalで理解する日本語サイト内検索

 スケーリングに優れたオープンソースの全文検索エンジンであるElasticsearchと、大規模サイトでの利用が多いオープンソースCMSのDrupalで、大量のコンテンツを日本語で検索可能にするサイト内検索の実装方法を解説しています。 

  

 

 ](/index%2ephp/jp/blog/intergration-with-drupal-and-elasticsearch)



  [Image

        ![Create Once, Publish Everywhere with API-First Drupal](/sites/default/files/styles/card_tablet/public/legacy/images/2018-02/istock-187108459_4.jpg?itok=gnpRX11g) 

 

 

 

 Blog Article 2 分 

######  DrupalのJSON:API入門

 DrupalをContent as a Service（CaaS）として活用する上で欠かせない「JSON:API」モジュールの概要から使い方、既存のREST APIとの違いなど、JSON:APIを使用してシステム間でデータを渡す方法についてご紹介します。 

  

 

 ](/index%2Ephp/jp/blog/introduction-to-json-api)



  [Image

        ![Digital Commerce and Search](/sites/default/files/styles/card_tablet/public/media/image/2021-12/Artboard%20%E2%80%93%2029.png?h=1de5b9b7&itok=9ICDX7vs) 

 

 

 

 Blog Article 2 分 

######  DrupalのSearch API入門 検索画面の作成と拡張モジュールの使用【後編】

 検索画面を作成する方法と、Search APIの拡張モジュールである「Facets」と「Autocomplete」に触れたいと思います。 

  

 Drupal 

 ](/index%2ephp/jp/blog/introduction-to-search-api-2)