Search API
プラグイン可能な検索バックエンドを使用して、あらゆるDrupalエンティティに対する検索を作成するための汎用フレームワークを提供します。
search_api
インストール
composer require 'drupal/search_api:8.x-1.40'
概要
Search APIは、Drupalのサイト検索機能のための強力で柔軟なフレームワークを提供します。サイト管理者や開発者は、Apache Solr、Elasticsearch、または組み込みのデータベースバックエンドなど、さまざまなバックエンドエンジンを使用してカスタム検索ソリューションを作成できます。
このモジュールは、7つのコアプラグインタイプを持つプラグインアーキテクチャを採用しています:バックエンド(検索エンジン)、データソース(インデックス対象のコンテンツ)、データ型、ディスプレイ(検索ページ)、パースモード(クエリ解釈)、プロセッサ(データ変換)、トラッカー(変更検出)。この拡張可能な設計により、検索体験のあらゆる側面を深くカスタマイズできます。
主な機能には、検索ページ構築のためのViews統合、Facetsモジュールによるファセット検索サポート、自動コンテンツ追跡と再インデックス、完全な多言語サポート、設定用の包括的な管理UIが含まれます。このモジュールは、ノード、ユーザー、タクソノミーターム、カスタムエンティティなど、あらゆるコンテンツエンティティタイプのインデックス作成をサポートしています。
Features
- 7つのプラグインタイプを持つプラグインベースアーキテクチャ:バックエンド、データソース、データ型、ディスプレイ、パースモード、プロセッサ、トラッカー
- 公開フィルター、ソート、ファセットを備えた検索ページ作成のための深いViews統合
- Apache Solr、Elasticsearch、データベース検索を含む複数の検索バックエンドのサポート
- テキスト変換、アクセス制御、ハイライト、ステミング、ブーストのための20以上の組み込みプロセッサ
- コンテンツ変更時の自動エンティティ追跡と再インデックス
- 完全な多言語およびマルチサイト検索サポート
- データ型マッピングとブースト係数を備えた柔軟なフィールド設定
- 設定可能なバッチサイズによるCronベースおよびオンデマンドのバッチインデックス作成
- レガシーフックを置き換えるイベント駆動型の拡張性
- 完全なCLI管理のための14のDrushコマンド
- インタラクティブツアー付きの包括的な管理UI
- 本番環境向けの読み取り専用インデックスモード
- 階層フィールドインデックス(タクソノミー階層)のサポート
- 類似コンテンツ提案のためのMore Like This機能
- 多様な検索結果のためのランダムソート機能
Use Cases
Solrを使用したエンタープライズサイト検索
数百万のノードを持つ大規模サイトでは、Solrバックエンドと共にSearch APIを使用します。異なるコンテンツタイプ(記事、製品、ページ)用のインデックスを作成し、HTMLフィルタリングとステミング用のプロセッサを追加し、公開フィルターとファセットを備えた複数のViewsベースの検索ページを構築します。
Eコマース製品検索
タイトル、説明、SKU、価格、タクソノミータームなどのフィールドを持つ製品エンティティ用の検索インデックスを作成します。製品を優先するために大文字小文字無視、ステマー、タイプブースト用のプロセッサを有効にします。価格帯、カテゴリ、属性フィルター用にFacetsモジュールを使用します。
マルチサイト統合検索
共有Solrサーバー上で複数のインデックスを設定し、複数のDrupalサイトを横断して検索します。サイト固有のプレフィックスを使用し、Search API PagesまたはカスタムViewsと組み合わせて統合結果を表示します。
ユーザーディレクトリ検索
Userデータソースを使用してインデックスを作成し、検索可能なスタッフディレクトリを構築します。名前、部署、役割、プロフィールフィールドなどのフィールドをインデックスします。ロールに基づくアクセス制御用のプロセッサを使用します。
メディアライブラリ検索
名前、代替テキスト、タクソノミータグなどのフィールドを持つメディアエンティティをインデックスします。ドキュメントコンテンツ内を検索するためにファイルコンテンツ抽出プロセッサ(Search API Attachments経由)を有効にします。
Database Defaultsを使用したクイックサイトセットアップ
Solrインフラストラクチャのないシンプルなサイトでは、search_api_db_defaultsモジュールを有効にして、すぐに動作する検索ページを取得します。このモジュールは、データベースサーバー、コンテンツインデックス、/search/contentでのViews検索を作成します。
Tips
- 素早い初期セットアップのためにDatabase Search Defaultsモジュールを使用し、設定後にアンインストールしてください
- 小規模サイトでは「アイテムを即座にインデックス」オプションを有効にしますが、大規模サイトではパフォーマンス問題を防ぐために無効にしてください
- サーバー容量に基づいてcron_limitを設定してください - 50から始めてCron実行時間に基づいて調整してください
- イベントリスナーで特定の検索をターゲットにするために'views_VIEW_ID'などのクエリタグを使用してください
- ハイライトプロセッサを有効にし、Viewsでsearch_api_excerptフィールドを使用して関連するスニペットを表示してください
- 本番サイトでは、パフォーマンスと機能向上のためにデータベースバックエンドよりもSolrを優先してください
- 「参照エンティティの変更を追跡」オプションは慎重に使用してください - 再インデックスの負荷が大幅に増加する可能性があります
- 大規模サイトでのコンフィグインポートを高速化するためにsearch_api.settingsの'disable_tracking_on_import'設定を使用できます
- ハイライトが不要なクエリにはパフォーマンスのために'search_api_skip_processor_highlight'タグを追加してください
- デプロイメントスクリプトでの効率的なインデックス管理のためにDrushコマンド(sapi-*)を使用してください
Technical Details
Admin Pages 7
/admin/config/search/search-api
すべての検索インデックスとサーバーを一覧表示するメイン管理ページ。各インデックスのステータス(有効/無効)、インデックス作成の進捗、接続されたサーバーを表示し、検索設定を管理するためのクイックアクションを提供します。
/admin/config/search/search-api/add-server
バックエンドプラグインを選択し、接続設定を構成して新しい検索サーバーを作成します。
/admin/config/search/search-api/server/{server_id}
サーバーのステータス、バックエンド情報、接続されたインデックスを表示します。サーバーの状態を表示し、すべてのインデックスデータのクリアなどのアクションを実行できます。
/admin/config/search/search-api/add-index
データソース、トラッカー、サーバーを選択し、インデックス作成オプションを設定して新しい検索インデックスを作成します。
/admin/config/search/search-api/index/{index_id}
インデックスの進捗、データソース統計、サーバー接続、Cron設定を含むインデックスステータスを表示します。インデックス作成操作をトリガーするコントロールを提供します。
/admin/config/search/search-api/index/{index_id}/fields
データ型、ブースト係数、マシン名を含む、どのフィールドをインデックスするかとその設定を構成します。
/admin/config/search/search-api/index/{index_id}/processors
インデックスデータと検索クエリを変換するプロセッサを有効化および設定します。
権限 1
Hooks 7
hook_search_api_backend_info_alter
利用可能なSearch APIバックエンドを変更(非推奨、代わりにイベントを使用)
hook_search_api_server_features_alter
検索サーバーがサポートする機能を変更(非推奨)
hook_search_api_datasource_info_alter
利用可能なデータソースプラグインを変更(非推奨)
hook_search_api_processor_info_alter
利用可能なプロセッサプラグインを変更(非推奨)
hook_search_api_index_items_alter
インデックス作成前にアイテムを変更(非推奨)
hook_search_api_query_alter
実行前に検索クエリを変更(非推奨)
hook_search_api_results_alter
実行後に検索結果を変更(非推奨)
Drush Commands 16
drush search-api:list
ステータス、サーバー、データソースを含むすべての検索インデックスを一覧表示
drush search-api:status [index_id]
完了率を含む1つまたはすべてのインデックスのインデックス作成ステータスを表示
drush search-api:index [index_id]
1つまたはすべての有効な検索インデックスのアイテムをインデックス
drush search-api:enable <index_id>
無効な検索インデックスを有効化
drush search-api:disable <index_id>
有効な検索インデックスを無効化
drush search-api:enable-all
すべての無効な検索インデックスを有効化
drush search-api:disable-all
すべての有効な検索インデックスを無効化
drush search-api:reset-tracker [index_id]
既存のデータを削除せずにアイテムを再インデックス対象としてマーク
drush search-api:rebuild-tracker [index_id]
トラッカー情報をゼロから完全に再構築
drush search-api:clear [index_id]
すべてのインデックスデータをクリアし再インデックス対象としてマーク
drush search-api:search <index_id> <keyword>
指定されたインデックスでキーワードを検索
drush search-api:server-list
ステータスを含むすべての検索サーバーを一覧表示
drush search-api:server-enable <server_id>
無効な検索サーバーを有効化
drush search-api:server-disable <server_id>
有効な検索サーバーを無効化
drush search-api:server-clear <server_id>
検索サーバー上のすべてのインデックスデータをクリア
drush search-api:set-index-server <index_id> <server_id>
インデックスのサーバーを設定
Troubleshooting 8
インデックスが有効で、cron_limitが0より大きく、保留中のタスクがないことを確認してください。'drush sapi-s'を実行してステータスを確認し、'drush search-api:index'で手動でインデックス作成をトリガーしてください。
アイテムがインデックスされていることを確認し(インデックスのViewタブを確認)、検索Viewが正しいインデックスをクエリしていることを確認し、フィールドタイプがクエリの期待と一致していることを確認してください(全文検索 vs 文字列)。
データベースユーザーにCREATE TEMPORARY TABLES権限があることを確認してください。これはファセット集約クエリに必要です。
複数のデータソースまたはエイリアスを確認してください。エンティティIDがデータソース間で一意であることを確認してください。Viewのdistinct設定を確認してください。
メモリ制約のある環境ではcron_limitを減らしてください。適切なbatch-size設定でDrush経由のバッチインデックス作成を使用してください。index_directlyオプションの無効化を検討してください。
アイテムがキューに入っているがまだインデックスされていない可能性があります。保留中のタスクを確認し、Cronが実行されていることを確認するか、手動で再インデックスをトリガーしてください。track_changes_in_referencesが無効の場合、参照エンティティへの変更は再インデックスをトリガーしません。
外部バックエンド(Solr/Elasticsearch)の場合、サーバーが実行中でアクセス可能であることを確認してください。バックエンド設定を確認してください。具体的なエラーメッセージについてはDrupalログを確認してください。
batch_sizeを減らすか、index_directlyを有効にしてインデックス作成を時間的に分散させるか、PHPのmemory_limitを増やしてください。データベースバックエンドはSolrよりもメモリを多く消費します。
Security Notes 7
- 'administer search_api'権限は完全な制御を付与します - 信頼できる管理者にのみ割り当ててください
- 検索結果でノードアクセス権限を尊重するためにContent accessプロセッサを有効にしてください
- 未公開コンテンツをインデックスから除外するためにEntity statusプロセッサを有効にしてください
- ロール固有のコンテンツ表示のためにRole-based accessプロセッサを有効にしてください
- インデックスされるフィールドを慎重に確認してください - 検索可能にすべきでない機密データのインデックス作成を避けてください
- データベースバックエンドはインデックスデータをデータベーステーブルに保存します - 適切なデータベースセキュリティを確保してください
- Solrなどの外部バックエンドを使用する場合、接続を保護しサーバーアクセスを制限してください