14.3.4. ファセット
ファセット検索は、クエリーの結果を複数のカテゴリーに分割できる技術です。この分類には、各カテゴリーのヒット数の計算や、これらのファイン (カテゴリー) に基づいて検索結果をさらに制限する機能が含まれます。例14.55「Amazon で HibernateSearch を検索する」 ファセットの例を示します。ページのメイン部分に表示される検索結果が表示されます。ただし、左側のナビゲーションバーには、Programming、Computer Science、Databases、Software、Web Development、Networking、Home Computing のサブカテゴリーを持つ Computers & Internet カテゴリーが表示されています。各サブカテゴリーについて、主要な検索条件に合致し、それぞれのサブカテゴリーに属する Book の数が表示されます。Computers & Internet のカテゴリーの区分は、特定の検索ファセットです。その他には、平均的なカスタマーレビューなどが挙げられます。
例14.55 Amazon で HibernateSearch を検索する
Hibernate Search の
QueryBuilder クラスおよび FullTextQuery クラスは、ファセット API へのエントリーポイントです。前者は要求を作成し、後者は FacetManager にアクセスします。FacetManager はクエリーにファセット要求を適用し、検索結果を絞り込むために既存のクエリーに追加されるブックマークを選択します。例では、次に示すようにエンティティー Cd を使用します。例14.56「エンティティー Cd」:
図14.1 Amazon で HibernateSearch を検索する
例14.56 エンティティー Cd
14.3.4.1. ファセット要求の作成 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ファセット検索に対する最初のステップは、
FacetingRequest を作成することです。現時点では、2 種類のセッティング要求がサポートされています。最初のタイプは discrete faceting と呼ばれ、次のタイプは range faceting 要求と呼ばれます。個別のファセットリクエストの場合は、ファセット (分類) を行うインデックスフィールドと、適用するファセットオプションを指定します。個別のファセットリクエストの例は、次のように表示されます。例14.57「個別のファセットリクエストの作成」:
例14.57 個別のファセットリクエストの作成
このファセットリクエストを実行すると、インデックス設定された
label フィールドの個別値ごとに Facetインスタンスが作成されます。ファセット インスタンスは、この特定のフィールド値が元のクエリー結果内で発生する頻度を含む実際のフィールド値を記録します。orderedBy、includeZeroCountsとmaxFacetCountは、任意のファセット要求に適用できるオプションのパラメーターです。orderedBy 作成されたファセットが返される順序を指定できます。デフォルトはFacetSortOrder.COUNT_DESC、ただし、フィールド値または範囲が指定された順序で並べ替えることもできます。includeZeroCount カウントが 0 のファセットを結果に含めるかどうかを決定します (デフォルトでは含まれます)。maxFacetCount返されるファセットの最大量を制限できます。
注記
現時点では、ファセッティングを適用するためにインデックス化されたフィールドを満たす必要のあるいくつかの前提条件があります。インデックス付きプロパティーは
String、Date、または Number および null の値を持つものは使用しないでください。さらに、プロパティーは Analyze.NO でインデックス化する必要があり、数値プロパティー @NumericField を指定する場合は指定する必要があります。
一定の範囲のファセットリクエストの作成は、ブックマークするフィールド値の範囲を指定する必要がある点以外は非常に似ています。一定の範囲のファセットリクエストは、複数の異なるレート範囲が指定されている場合に例14.58「範囲ファセットリクエストの作成」 で確認できます。
below とabove指定できるのは 1 回だけですが、指定できるのはいくつでもかまいませんfrom-toあなたが望むように範囲。範囲の境界ごとに、次の方法で指定することもできます。excludeLimit範囲に含まれるかどうか。
例14.58 範囲ファセットリクエストの作成