ファセット検索の使い方

ファセット検索とは、商品カテゴリー、価格帯、ブランド、色など、複数のフィルター(ファセット)を適用して検索結果を絞り込むことができる検索インターフェース技術です。この手法により、ユーザーは特定の属性に基づいて検索結果を絞り込むことができるため、クエリーに最も関連性の高い結果を迅速かつ効率的に見つけることができます。ファセット検索は、eコマースや情報検索システムなどでよく利用されています。 この記事では、私たちがおすすめするContent Repository 7でのファセット検索の使い方をご紹介します。
はじめに…Content Repository 7とは?
Content Repository 7とはMintJamsのコンテンツ管理ソフトウェアContent Repositoryの最新バージョンであり、文書共有、ウェブ制作、eコマースなどの分野を問わず、あらゆる種類のデジタルコンテンツを保存、共有して、チームで協働作業したり、ウェブサイトを公開したりできます。
- ビジネスプロセス管理(BPM)やエンタープライズ統合パターン(EIP)との統合: 組織はコンテンツとビジネスプロセスを単一のプラットフォームで管理することができ、効率性の向上と複雑さの軽減を実現します。
- システム開発やウェブサイトの公開: CMS、BPM、EIPの組み合わせにより、システム開発やウェブサイトの制作において、開発プロセスを合理化し、市場投入までの時間を改善することができます。
- カスタマイズと拡張性: このプラットフォームのアーキテクチャとデザインパターンは、カスタマイズとスケーラビリティを可能にし、企業が特定のニーズに合わせてプラットフォームを調整し、ビジネスの成長に合わせて拡張することを可能にします。
バージョン7では、検索機能が大幅に改善され、ファセット検索をより早く実装できるようになりました。
ファセット検索の使い方
ファセット検索の実装工程は以下です:
- コンテンツの登録
- 検索クエリーの作成
- Web APIの作成
1. コンテンツの登録
ファセット検索を始めるには、まず最初にコンテンツにプロパティーを設定します。プロパティーはFile Browserや各エディターから設定でき、これだけでデータの準備は完了です。

プロパティーには、テキスト、数値、日付、論理値が使用でき、数値、日付を設定した場合には範囲によるファセット検索も可能です。 Facet Managerを使うと、ファセットタイプを効率的に管理できます。

2. 検索クエリーの作成
コンテンツにプロパティーを設定できたら、次は検索クエリーを作成します。 Content Repository 7では、コンテンツを検索する場合と同様の方法でファセット検索できるようになりました。検索機能を使い分ける必要がなくなったことで、機能がより分かりやすくなり、ウェブ制作者の学習期間の短縮が見込めます。 Content Repository 7でファセット検索するには、次のようにXPathクエリーでfacet accumulate句を使います。
//* facet accumulate @color
シンプルなクエリーで、簡単にファセットカウントを取得できます。 ドリルダウンする場合などでは、パスやプロパティーを条件に検索範囲を絞り込むこともできます。
- パスを指定すると、コンテンツのパスを条件に検索範囲を絞り込むことができます。
/jcr:root/content/ecommerce/items/pets//* facet accumulate @color
- プロパティーを使うと、指定された検索条件に基づいて検索を行うといったこともできます。
/jcr:root/content/ecommerce/items//* [@category = 'pets'] facet accumulate @color
- 範囲を指定すれば、例えば商品の価格帯に基づいてファセットカウントを取得するといったこともできます。
//* [@category = 'pets'] facet accumulate
range('-1000', '@price <= 1000'),
range('1000-2000', '1000 < @price <= 2000')
これらを組み合わせてクエリーを作成します。
3. Web APIの作成
検索クエリーができたらウェブトップにログインしてWeb APIを作成します。 ウェブトップでテキストエディターを使ってスクリプトを書いていきます。ローコードで簡単に作成できます。
// 検索文字列、絞り込み条件などのパラメーターを受け取る
def params = WebRequest
.create(context)
.with(request)
.parseRequest();
// 検索クエリーを作成する
// params.category: 検索条件
// params.limit: 検索結果の数
def stmt = "//* [@category = "
+ XPath.value(params.category)
+ "] facet accumulate @color";
// ファセットカウントを取得する
// limit=0を指定するとコンテンツ検索をスキップできる
def facets = [:];
def result = XPath.createQuery(stmt)
.limit(0)
.execute();
for (facet in result.facetResult.getFacet('color').values) {
facets[facet.key] = facet.value;
}
// 検索結果を送信する
WebResponse
.create(context)
.with(response)
.setStatus(200)
.setContentType("application/json")
.write(JSON.stringify(facets));
ウェブトップ上ですぐに動作の確認もできますので、納得のいくまで、何度でも「書く」「試す」を繰り返しながら進めることができます。

Content Repository 7を試してみませんか?
もしもあなたがシステムの運用に費やす時間を減らして、より多くの時間を制作やクリエイティブな作業に費やしたいと願っているのであれば、このContent Repository 7の機能はその課題を解決する手段になり得るかもしれません。