PowerCMS™
XMLRPC API におけるコマンド・インジェクションの脆弱性対策 (JVN#7602487) を追加しました。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] リッチテキストエディタを使用した際の HTML の記述が XHTML の記述に変換されるのはなぜですか? を追加しました。
[よくあるご質問] PowerCMS の各データが持つ ID を任意の値に指定したり変更できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > PowerCMS 5 > エンタープライズ検索で記事ごとに検索対象から除外する方法

2022年02月09日

エンタープライズ検索で記事ごとに検索対象から除外する方法

PowerCMS のエンタープライズ検索 (PowerSearch プラグイン) では様々な条件での絞り込み検索が行えます。 絞り込み条件では NOT 検索も可能ですが、今回紹介するのは、検索結果から除外するのではなく検索対象から除外、そもそも検索させない方法です。

今回は、記事ごとに除外するか選択できる実装方法を紹介します。

運用イメージ

  • 記事の作成/編集画面でカスタムフィールド「検索対象から除外する」にチェックを入れるとその記事は検索されない

こちらを実現する作業のおもなステップは下記の3つです。

  1. 記事へカスタムフィールドを作成する
  2. ドラフトファイルを出力するテンプレートのアーカイブマッピングを変更する
  3. ドラフトファイルを出力するテンプレートの内容を変更する

実装手順 1. 記事へカスタムフィールドを設定する

記事に対して下記のようなカスタムフィールドを作成します。

項目設定例
名前検索対象から除外する
説明検索されたくない記事の場合はチェックを入れてください
システムオブジェクト記事
種類チェックボックス
ベースネームentry_exclude_search
タグEntryExcludeSearch

実装手順 2. アーカイブマッピングへカスタムフィールドタグを記述する

ドラフトファイルを生成するアーカイブテンプレートのアーカイブマッピングへ、手順1. で作成したカスタムフィールドタグを下記のように変更してください。

修正前のアーカイブマッピング例

draft/entry_%E.est

修正後のアーカイブマッピング例

<MTUnless tag="EntryExcludeSearch">draft/entry_%E.est<MTElse>draft_exclude/entry_%E.est</MTUnless>

修正は修正前のテンプレートを囲む内容ですが、アーカイブマッピングを修正する際は空白や改行のなど不可視文字の入力に注意して行ってください。

<MTUnless tag="EntryExcludeSearch">
(修正前のアーカイブマッピングの内容)
<MTElse>
draft_exclude/entry_%E.est
</MTUnless>

実装手順 3. ドラフトファイルを出力するテンプレートの内容を変更する

ドラフトファイルを出力するテンプレートの内容を下記のように、カスタムフィールドタグがなかった場合に何も出力しないように変更します。

<MTUnless tag="EntryExcludeSearch">
(修正前のテンプレートの内容)
</MTUnless>

実装手順は終了

以上で実装は完了です。

今後、カスタムフィールド「検索対象から除外する」にチェックを入れた記事は検索されなくなります。

仕組みの解説

エンタープライズ検索はドラフトファイルの内容を検索インデックス (検索用のデータベース)へ登録し、その検索インデックスに対して検索を行います。

ですので、ドラフトファイルの内容を検索インデックスへ登録しないことで検索されないようにでき、今回の実装手順ではドラフトファイルの内容と生成場所を変更することで実現しています。

解説 1. 記事へカスタムフィールドを作成する

記事毎に検索されないことを設定するためにカスタムフィールドを作成しました。

今回は検索されないことを目的としていましたが、逆に、検索される記事のみチェックを入れる実装も可能です。

解説 2. ドラフトファイルを出力するテンプレートのアーカイブマッピングを変更する

検索インデックスに登録されるドラフトファイルは draft ディレクトリ(プラグイン設定で変更可能) に、拡張子が est であるとう条件があり、他のディレクトリへドラフトファイルを出力したり、拡張子を変更することで検索インデックスへ登録できなくできます。

この手順では検索されたくない記事のドラフトファイルは draft_exclude ディレクトリへ出力しています。

ドラフトファイルを出力するディレクトリを変更するのではなく、拡張子を変更することでも実現できますが、ディレクトリを変更した方が、本記事でドラフトファイルのディレクトリを変更しているのは検索されたくない記事について検索インデックスの作成・更新時にかかる時間を軽減するためです。

解説 3. ドラフトファイルを出力するテンプレートの内容を変更する

検索インデックスに登録されるドラフトファイルはドラフトファイル用のフォーマットで記述されている必要があります。

この手順では検索されたくない記事のドラフトファイルの内容を空にしています。

ドラフトファイルのフォーマットについては @uri の指定がないだけで、検索インデックスへ登録されないようにできますが、本記事でテンプレート全体の内容を囲っているのは検索されたくない記事のドラフトファイルの再構築にかかる時間を軽減するためです。

FAQ

Q. 今回とは逆に、特定の記事のみ検索されるようにできますか?

はい、特定の記事のみ検索することも可能です。

Q. 記事毎ではなくカテゴリやタグによって制御できますか?

はい、カテゴリやタグを条件によって制御することもできます。

条件を変更する場合は手順 2-3. を変更する必要があります。

Q. 手順 2. と手順 3. のどちらかのみの実装でも検索されないようにできますか?

はい、手順 2. と手順 3. のどちらかのみの実装でも実現可能ですが、両方を行った方がパフォーマンス低下の軽減になるため両方行われることをおすすめいたします。


カテゴリー
PowerCMS 4
PowerCMS 5
テンプレート作成Tips

Recent Entries