問題
検索ページでは、管理者ユーザは、ウィジェット構成で特定のオブジェクトタイプを事前に選択することで、タイプファセットを使用して検索結果を絞り込むことができます。
この場合、管理者が事前に特定のカテゴリーを選択することができず、最終的なユーザーにフィルター機能を委ねることになります。
検索結果が最終的なユーザーに表示される前に、管理者がフィルタリングのために特定のカテゴリーを事前に設定する方法は?
環境
- Liferay DXP 7.3
- Liferay DXP 7.4
- Liferay クォータリー・リリース
解像度
このファセットは、エンドユーザーが返された結果の異なるカテゴリーを見て検索を絞り込むために設計されているため、残念ながらカテゴリーファセットを使用して必要なフィルタリングを実行することはできません。
ここで、いくつかの選択肢を考えてみよう:
ブループリント
DXP 7.3 Update 6およびDXP 7.4 Update 5以降、プログラミングやソースコードへのアクセスなしに検索機能の動作を簡単にカスタマイズできる「ブループリント」機能があります。
ブループリントについては、以下のページで詳しく説明しています:
- https://learn.liferay.com/w/dxp/using-search/liferay-enterprise-search/search-experiences/search-blueprints
- https://learn.liferay.com/w/dxp/using-search/liferay-enterprise-search/search-experiences/search-blueprints/understanding-search-blueprints
カスタムフィルター
カスタムフィルタを使用すると、ウィジェットが配置されている検索ページにフィルタを追加できるので、追加されたカスタムフィルタはすべて、検索中に実行される Elasticsearch クエリにフラグメントを追加して制限します:
ドキュメント
カスタムフィルタウィジェットのドキュメントはこちらです:
- カスタムフィルターに関する一般的な情報: https://learn.liferay.com/web/guest/w/dxp/using-search/search-pages-and-widgets/search-results/filtering-search-results
-
カスタムフィルターのフィルター例:
- https://learn.liferay.com/w/dxp/using-search/search-pages-and-widgets/search-results/custom-filter-examples
- https://help.liferay.com/hc/en-us/articles/360056888752-Restrict-a-search-with-an-Elasticsearch-query-and-the-Custom-Filter-widget
- https://help.liferay.com/hc/en-us/articles/360045255792-How-to-hide-specific-pages-from-search-results-using-the-Custom-Filter-Widget
カスタムフィルタを使用してカテゴリをフィルタリングする方法
1つまたは複数のカテゴリーでフィルターをかけたい場合は、「カスタム・フィルター」を追加し、エンドユーザーがフィルターの対象となるカテゴリー名を追加したり削除したりすることができる。
特定のインデックス付きコンテンツが与えられた場合、その割り当てられたカテゴリー名が格納されるフィールドは次のようになる:
-
assetCategoryTitles_en_US(英語のカテゴリー名 -
スペイン語のカテゴリー名を表す
assetCategoryTitles_es_ES
注:ElasticSearchから返されたデータを確認したい場合は、「Display Results in Document Form」オプションをご利用ください。https://learn.liferay.com/w/dxp/using-search/search-pages-and-widgets/search-results/configuring-the-search-results-widget#inspecting-search-engine-documents
カスタムフィルタを追加し、カテゴリでフィルタするには、以下の手順に従ってください:
- カスタムフィルター」ポートレットをカスタマイズしたい検索ページにドラッグして追加します。
- カスタムフィルター」ポートレット => 右上隅、3点メニュー => 設定 => 「詳細設定」セクションに移動します。
- 詳細設定で
-
>例えば、
assetCategoryTitles_en_US(英語)やassetCategoryTitles_es_ES(スペイン語)などです。 -
Filter Value =>スペースで区切られた、表示するカテゴリーの名前。
- 例えば、
cat1 cat2 cat3は、これらのカテゴリのいずれかを含む結果のみを表示する。 - 名前にスペースがある場合は、引用符で囲んで設定することもできる。
- そのため、フィルタは前のステップで設定したフィルタフィールドの名前に対応する言語を使用する必要があります。例えば、
assetCategoryTitles_es_ESが使用された場合、スペイン語のカテゴリ名を使用します。
- 例えば、
- Filter Query Type =>Match (Elasticsearch 節のタイプ)
- Occur =>must (特定のカテゴリーを持つものだけを表示する)
- クエリ名 =>ユーザーインターフェイスに表示されるクエリ名を追加できます。同じページに複数のクエリを追加する場合や、複数のレベルを持つ複雑なクエリを作成する場合に、「カスタムフィルタ」を区別するのに便利です。
- Invisible => (管理者以外のユーザーにポートレットが表示されないようにします。)
-
>例えば、
- 変更を保存します。
- 検索操作を繰り返すと、設定したフィルタリングが適用されるはずだ。
- 生成されている Elasticsearch クエリを確認する必要がある場合は、Search Insightsウィジェットを使用することができます。
技術者でないユーザがフィルタリングでカテゴリーを追加したり削除したりできるようにする必要があるとおっしゃるので、私がお示ししたように、このポートレット「カスタムフィルター」をあらかじめ設定したままにしておいて、ユーザがその設定で「フィルター値」フィールドの値を変更できるように制限することができます。
このユーザーは、表示したいコンテンツのカテゴリーをスペースで区切って設定しなければならない。
追加情報
- ブループリント:
-
カスタムフィルター:
- 一般情報:https://learn.liferay.com/web/guest/w/dxp/using-search/search-pages-and-widgets/search-results/filtering-search-results
- 例: https://learn.liferay.com/w/dxp/using-search/search-pages-and-widgets/search-results/custom-filter-examples、https://help.liferay.com/hc/en-us/articles/360056888752-Restrict-a-search-with-an-Elasticsearch-query-and-the-Custom-Filter-widgetまたはhttps://help.liferay.com/hc/en-us/articles/360045255792-How-to-hide-specific-pages-from-search-results-using-the-Custom-Filter-Widget
- 検索結果の詳細オプション