Search API Exclude Entity
Search API インデックスから特定のエンティティを選択的に除外するためのフィールドタイプと Search API プロセッサを提供します。
search_api_exclude_entity
インストール
composer require 'drupal/search_api_exclude_entity:^3.0'
composer require 'drupal/search_api_exclude_entity:^2.0'
composer require 'drupal/search_api_exclude_entity:8.x-1.4'
概要
Search API Exclude Entity は Apache Solr Node Exclude モジュールの Drupal 8 以降向け後継モジュールです。Search API フレームワークを使用して設定された検索インデックスから、特定のノードやその他のエンティティを除外する機能をサイト管理者に提供します。
このモジュールはカスタムフィールドタイプのアプローチを採用しており、エンティティの除外ステータスを制御するための専用のフィールドタイプ、ウィジェット、フォーマッターを提供します。このアーキテクチャには複数の利点があります:エンティティタイプ/バンドルごとにフィールドの位置、ラベル、説明を設定可能、同じエンティティバンドルに対して異なる検索システムやインデックス用の複数の除外フィールドをサポート、カスタムプラグインなしで Views との自動統合が可能です。
エンティティの除外フィールドがチェックされると、Search API プロセッサはインデックス作成操作中にそのエンティティが検索インデックスに追加されることを防ぎます。
Features
- エンティティを検索インデックスから除外すべきかどうかを示すブール値を格納するカスタム「Search API Exclude Entity」フィールドタイプ
- チェックボックスのラベルテキストや「Advanced」セクションの details コンテナ内に表示するかどうかのオプションを備えた設定可能なフィールドウィジェット
- 「Yes/No」表示形式を持つコアのブールフォーマッターを拡張したフィールドフォーマッター
- 「alter_items」インデックス作成ステージで除外対象としてマークされたエンティティをフィルタリングする Search API プロセッサプラグイン
- 各検索インデックスに対してエンティティタイプごとにどの除外フィールドを使用するかを選択できるプロセッサ設定
- エンティティバンドルごとに複数の除外フィールドをサポートし、異なる検索インデックスからの除外を独立して制御可能
- エンティティの除外ステータス編集に対するパーミッションベースのアクセス制御
- Single Content Sync モジュールとの統合による除外フィールド値のインポート/エクスポート
- カスタムプラグインを必要としない Views との即時統合
Use Cases
特定のランディングページを検索から除外する
マーケティングチームがサイトの検索結果に表示されるべきではない一時的なプロモーションランディングページを作成します。ランディングページコンテンツタイプに Search API Exclude Entity フィールドを追加することで、編集者はページを公開して直接 URL でアクセス可能な状態を維持しながら、検索から非表示にしたい各ページの除外オプションにチェックを入れることができます。
異なるコンテンツを持つ複数の検索インデックス
サイトにはパブリック検索と内部スタッフ検索があり、それぞれ異なる Search API インデックスを使用しています。コンテンツタイプに 2 つの別々の除外フィールドを追加し、各インデックスのプロセッサが適切なフィールドを使用するように設定することで、編集者はコンテンツがパブリック検索、スタッフ検索、または両方に表示されるかを独立して制御できます。
noindex メタタグを持つコンテンツを除外する
サイトで既に Metatag モジュールを使用して特定のページに robots noindex を設定しています。search_api_exclude_entity_metatag サブモジュールを使用することで、これらのページは Search API インデックスから自動的に除外され、外部検索エンジンと内部検索で表示されるものの一貫性が確保されます。
下書きまたは未公開相当のコンテンツを除外する
search_api_exclude_entity_by_field サブモジュールを使用すると、「status」ドロップダウンが「Draft」や「Review」に設定されているなどのフィールド値に基づいてコンテンツを除外でき、標準の公開/非公開状態を超えたより細かい制御が可能になります。
編集ワークフローにおけるパーミッション制御された除外
シニア編集者のみがコンテンツを検索から除外できるようにする必要があります。「edit search api exclude entity」パーミッションを「シニア編集者」ロールにのみ付与することで、ジュニア編集者はコンテンツを作成・公開できますが、検索での表示には影響を与えられません。
Tips
- プロセッサ設定でフィールドがすぐに表示されるように、Search API インデックスを作成する前にエンティティタイプに除外フィールドを追加してください。
- 特に複数の除外フィールドを使用する場合、編集者がどの検索インデックスが影響を受けるかを理解できるよう、チェックボックスにわかりやすいフィールドラベルを使用してください。
- メインフォームをすっきりさせるため、ウィジェットの「Use details container」設定を使用して除外フィールドを「Advanced」セクションに配置することを検討してください。
- テスト時には、除外設定を変更した後に再インデックスすることを忘れないでください - 除外はインデックス作成プロセス中にのみ行われます。
- 多くのコンテンツタイプを持つサイトでは、バンドル間で同じフィールドを再利用できます - プロセッサはすべてのインスタンスを自動的に検出します。
- このモジュールは Solr、Elasticsearch、Database Search を含むあらゆる Search API バックエンドで動作します。
Technical Details
権限 1
Hooks 2
hook_form_field_storage_config_edit_form_alter
Search API Exclude Entity フィールドのフィールドストレージ編集時にカーディナリティコンテナを非表示にして無効化します。このフィールドはカーディナリティ 1 のみをサポートするためです。
hook_entity_field_access
「edit search api exclude entity」パーミッションに基づいて Search API Exclude Entity フィールドへの編集アクセスを制御します。このパーミッションを持たないユーザーはエンティティフォームで除外フィールドを編集できません。
Troubleshooting 4
エンティティの除外フィールドにチェックを入れた後、変更を有効にするにはコンテンツを再インデックスする必要があります。Search API インデックスに移動して「Re-index」をクリックするか、Drush コマンド「drush sapi-r index_name」を使用してください。また、Search API Exclude Entity プロセッサが有効になっていて、プロセッサ設定で正しいフィールドが選択されていることを確認してください。
「edit search api exclude entity」パーミッションを持っていることを確認してください。フィールドアクセスはこのパーミッションによって制御され、持っていないユーザーにはフォームでフィールドが表示されません。
検索インデックスのデータソースに含まれている少なくとも 1 つのエンティティタイプ/バンドルに「Search API Exclude Entity」フィールドが追加されていることを確認してください。プロセッサはインデックスでデータソースとして設定されているエンティティタイプのフィールドのみを表示します。
ウィジェット設定を確認し、「Use details container」が有効になっていることを確認してください。また、フォーム表示設定がフィールドを正しく配置していることを確認してください。「advanced」フォームグループをレンダリングしないテーマを使用している場合、フィールドは別の場所に表示されることがあります。
Security Notes 2
- 「edit search api exclude entity」パーミッションは誰が除外設定を変更できるかを制御します。検索結果でのコンテンツの表示に影響するため、このパーミッションは慎重に付与してください。
- コンテンツを検索から除外しても、コンテンツへの直接アクセスは防止されません - 検索インデックスでの表示にのみ影響します。コンテンツアクセスを完全に制限する必要がある場合は、他のアクセス制御メカニズムを使用してください。