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 範囲ファセットリクエストの作成