**ファセット**
ファセットとは、インデックス付きの用語に基づいて検索結果をカテゴリに分類することです。
検索者には、インデックス付きの用語と、各用語で見つかった一致するドキュメントの数値カウントが表示されます。ファセットを使用すると、ユーザーは検索結果を簡単に探索し、探している結果を絞り込むことができます。
これに対する別の方法については、JSON ファセット API も参照してください。
一般的なファセットパラメータ
ファセットを制御するための 2 つの一般的なパラメータがあります。
facet
-
必須
デフォルト:
false
true
に設定すると、このパラメータはクエリ応答でファセットカウントを有効にします。false
、空の値、または欠落している値に設定すると、このパラメータはファセットを無効にします。 このパラメータがtrue
に設定されていない限り、以下にリストされている他のパラメータはすべて無効になります。 facet.query
-
オプション
デフォルト: なし
このパラメータを使用すると、Lucene のデフォルト構文で任意のクエリを指定して、ファセットカウントを生成できます。
デフォルトでは、Solr のファセット機能はフィールドの一意の用語を自動的に決定し、各用語のカウントを返します。
facet.query
を使用すると、このデフォルトの動作をオーバーライドし、カウントする用語または式を正確に選択できます。 ファセットの典型的な実装では、いくつかのfacet.query
パラメータを指定します。 このパラメータは、数値範囲ベースのファセットまたはプレフィックスベースのファセットに特に役立ちます。複数のクエリを個別のファセット制約として使用する必要があることを示すために、
facet.query
パラメータを複数回設定できます。デフォルト構文以外の構文でファセットクエリを使用するには、ファセットクエリの前にクエリ表記法の名前を付けます。 たとえば、仮定の
myfunc
クエリパーサーを使用するには、次のようにfacet.query
パラメータを設定しますfacet.query={!myfunc}name~fred
フィールド値ファセットパラメータ
フィールドにインデックス付きの用語に基づいてファセットをトリガーするために、いくつかのパラメータを使用できます。
これらのパラメータを使用する場合、「用語」は Lucene では非常に具体的な概念であることを覚えておくことが重要です。これは、分析が行われた後にインデックス付けされるリテラルフィールド/値のペアに関連しています。ステミング、小文字化、または単語分割を含むテキストフィールドの場合、結果の用語は予期したものとは異なる場合があります。
Solrで完全なリテラル文字列に対して分析(検索用)とファセットの両方を実行する場合は、スキーマでcopyField
ディレクティブを使用して、フィールドの2つのバージョンを作成します。1つはテキスト、もう1つは文字列です。テキストフィールドは、検索に使用されるがファセットに使用されない場合はindexed="true" docValues="false"
にする必要があり、文字列フィールドは、ファセットに使用されるが検索に使用されない場合はindexed="false" docValues="true"
にする必要があります。(copyField
ディレクティブの詳細については、フィールドのコピーを参照してください。)
特に指定がない限り、以下のすべてのパラメータは、f.<fieldname>.facet.<parameter>
の構文を使用して、フィールドごとに指定できます。
facet.field
-
オプション
デフォルト: なし
facet.field
パラメータは、ファセットとして扱うべきフィールドを識別します。フィールド内の各用語を反復処理し、その用語を制約として使用してファセット数を生成します。このパラメータは、クエリで複数回指定して、複数のファセットフィールドを選択できます。スキーマ内の少なくとも1つのフィールドにこのパラメータを設定しない場合、このセクションで説明されている他のパラメータはすべて効果がありません。 facet.prefix
-
オプション
デフォルト: なし
facet.prefix
パラメータは、ファセット対象の用語を、指定された文字列プレフィックスで始まる用語に制限します。これは、クエリを制限するものではなく、クエリへの応答として返されるファセットのみを制限します。 facet.contains
-
オプション
デフォルト: なし
facet.contains
パラメータは、ファセット対象の用語を、指定された部分文字列を含む用語に制限します。これは、クエリを制限するものではなく、クエリへの応答として返されるファセットのみを制限します。 facet.contains.ignoreCase
-
オプション
デフォルト: なし
facet.contains
が使用されている場合、facet.contains.ignoreCase
パラメータは、指定された部分文字列を候補ファセット用語と照合する際に大文字と小文字を無視するようにします。 facet.matches
-
オプション
デフォルト: なし
正規表現に一致する用語のファセットバケットのみを返す場合に使用します。
facet.sort
-
オプション
デフォルト: なし
このパラメータは、ファセットフィールドの制約の順序を決定します。
このパラメータには2つのオプションがあります。
count
-
制約をカウントでソートします(カウントの高い順)。
index
-
制約をインデックス順(インデックス付き用語による辞書順)でソートして返します。ASCII範囲の用語の場合、これはアルファベット順にソートされます。
デフォルトは、
facet.limit
が0より大きい場合はcount
、それ以外の場合はindex
です。特定の用語でファセットを制限する場合、デフォルトのロジックが変更されることに注意してください。
facet.limit
-
オプション
デフォルト:
100
このパラメータは、ファセットフィールドに対して返されるべき制約カウントの最大数(基本的に、フィールドのファセットの数)を指定します。負の値は、Solrが制約カウントを無制限に返すことを意味します。
facet.offset
-
オプション
デフォルト:
0
facet.offset
パラメータは、ページングを許可するための制約リストへのオフセットを示します。 facet.mincount
-
オプション
デフォルト:
0
facet.mincount
パラメータは、ファセットフィールドが応答に含まれるために必要な最小カウントを指定します。フィールドのカウントが最小値を下回っている場合、フィールドのファセットは返されません。 facet.missing
-
オプション
デフォルト:
false
true
に設定すると、このパラメータは、ファセットフィールドの用語ベースの制約に加えて、クエリに一致するがフィールドにファセット値がないすべての結果のカウントを計算して応答で返す必要があることを示します。 facet.method
-
オプション
デフォルト:
fc
facet.method
パラメータは、Solrがフィールドをファセット化する際に使用するアルゴリズムまたはメソッドのタイプを選択します。以下のメソッドが利用可能です。
enum
-
フィールド内のすべての用語を列挙し、用語に一致するドキュメントとクエリに一致するドキュメントの積集合を計算します。
このメソッドは、少数の個別値のみを持つ複数値フィールドのファセット化に推奨されます。ドキュメントあたりの平均値数は関係ありません。
たとえば、
Alabama、Alaska、… Wyoming
などの米国の州を持つフィールドでファセット化すると、50個のキャッシュされたフィルターが作成され、繰り返し使用されます。filterCache
は、すべてのキャッシュされたフィルターを保持するのに十分な大きさにする必要があります。 fc
-
クエリに一致するドキュメントを反復処理し、各ドキュメントに現れる用語を合計することで、ファセット数を計算します。
これは現在、フィールドが複数値であるか、またはトークン化されている(
FieldType.isTokened()
による)場合、UnInvertedField
キャッシュを使用して実装されています。各ドキュメントはキャッシュで検索され、含まれている用語/値が確認され、各値の集計が増加します。このメソッドは、フィールドのインデックス付き値の数は多いが、ドキュメントあたりの値の数は少ない場合に最適です。複数値フィールドの場合、多くのドキュメントに一致する用語の
filterCache
からの用語フィルターを使用するハイブリッドアプローチが使用されます。文字fc
はフィールドキャッシュの略です。 fcs
-
単一値文字列フィールドのセグメントごとのフィールドファセット。
facet.method=fcs
で有効にし、threads
ローカルパラメータを使用して使用するスレッド数を制御します。このパラメータを使用すると、インデックスが急速に変化する場合にファセットを高速化できます。
デフォルト値は
fc
です(BoolField
フィールドタイプを使用するフィールドとfacet.exists=true
が要求されている場合を除く)。これは、フィールドにインデックスに多くのユニークな用語がある場合、メモリ使用量が少なく、高速になる傾向があるためです。 facet.enum.cache.minDf
-
オプション
デフォルト:
0
このパラメータは、その用語の制約カウントを決定する際にfilterCacheを使用する必要がある最小ドキュメント頻度(用語に一致するドキュメントの数)を示します。これは、ファセットの
facet.method=enum
メソッドでのみ使用されます。ゼロより大きい値は、filterCacheのメモリ使用量を削減しますが、クエリを処理するために必要な時間を増加させます。非常に多数の用語を持つフィールドでファセットを作成し、メモリ使用量を削減したい場合は、このパラメータを
25
から50
の間の値に設定して、いくつかのテストを実行してみてください。その後、必要に応じてパラメータ設定を最適化します。デフォルト値は
0
で、filterCacheがフィールド内のすべての用語に使用されます。 facet.exists
-
オプション
デフォルト: なし
ファセット数を1に制限するには、
facet.exists=true
を指定します。このパラメータは、facet.method=enum
を使用する場合、または省略されている場合に使用できます。これは、非トライフィールド(文字列など)でのみ使用できます。大きなインデックスやカーディナリティの高いファセット値のファセットカウントを高速化できます。 facet.excludeTerms
-
オプション
デフォルト: なし
ファセットカウントから用語を削除するが、インデックスには残したい場合、
facet.excludeTerms
パラメータを使用するとそれができます。 facet.overrequest.count
andfacet.overrequest.ratio
-
オプション
デフォルト:*説明を参照*
状況によっては、分散Solrクエリでファセットに返される「上位」制約を選択する際の精度を、個々のシャードそれぞれから必要な制約の数(つまり、
facet.limit
)を「オーバーリクエスト」することで向上させることができます。このような状況では、各シャードはデフォルトで上位10 + (1.5 * facet.limit)
の制約を要求されます。ドキュメントがシャード間でどのようにパーティション分割されているか、および使用した
facet.limit
値に応じて、Solrが行うオーバーリクエストの量を増減すると有利な場合があります。これは、facet.overrequest.count
(デフォルトは10
)およびfacet.overrequest.ratio
(デフォルトは1.5
)パラメータを設定することで実現できます。 facet.threads
-
オプション
デフォルト: なし
このパラメータは、ファセットで使用される基になるフィールドの読み込みを、指定されたスレッド数で並列に実行させます。
facet.threads=N
として指定します。ここで、N
は使用される最大スレッド数です。このパラメータを省略するか、スレッド数を
0
として指定すると、スレッドは生成されず、メインのリクエストスレッドのみが使用されます。負のスレッド数を指定すると、最大Integer.MAX_VALUE
スレッドが作成されます。
範囲ファセット
範囲ファセットは、日付フィールド、または範囲クエリをサポートする数値フィールドで使用できます。これは、価格などの範囲クエリ(クエリによるファセット)をまとめてつなぎ合わせる場合に特に役立ちます。
facet.range
-
必須
デフォルト: なし
facet.range
パラメータは、Solrが範囲ファセットを作成するフィールドを定義します。例えばfacet.range=price&facet.range=age
facet.range=lastModified_dt
facet.range.start
-
必須
デフォルト: なし
facet.range.start
パラメータは、範囲の下限を指定します。このパラメータは、f.<fieldname>.facet.range.start
の構文を使用してフィールドごとに指定できます。例えばf.price.facet.range.start=0.0&f.age.facet.range.start=10
f.lastModified_dt.facet.range.start=NOW/DAY-30DAYS
facet.range.end
-
必須
デフォルト: なし
facet.range.end
は、範囲の上限を指定します。このパラメータは、f.<fieldname>.facet.range.end
の構文を使用してフィールドごとに指定できます。例えばf.price.facet.range.end=1000.0&f.age.facet.range.start=99
f.lastModified_dt.facet.range.end=NOW/DAY+30DAYS
facet.range.gap
-
必須
デフォルト: なし
下限に追加される値として表される各範囲のスパン。日付フィールドの場合、これは
DateMathParser
構文を使用して表す必要があります(例:facet.range.gap=%2B1DAY … '+1DAY'
)。このパラメータは、
f.<fieldname>.facet.range.gap
の構文を使用してフィールドごとに指定できます。例えばf.price.facet.range.gap=100&f.age.facet.range.gap=10
f.lastModified_dt.facet.range.gap=+1DAY
facet.range.hardend
-
オプション
デフォルト:
false
facet.range.hardend
パラメータは、facet.range.gap
がfacet.range.start
とfacet.range.end
の間で均等に分割されない場合にSolrがどのように処理するかを指定するブールパラメータです。true
の場合、最後の範囲制約は、上限としてfacet.range.end
値を持ちます。false
の場合、最後の範囲はfacet.range.end
より大きい最小の上限値を持つため、範囲は指定された範囲ギャップと完全に同じ幅になります。このパラメータは、
f.<fieldname>.facet.range.hardend
の構文を使用してフィールドごとに指定できます。 facet.range.include
-
オプション
デフォルト:*説明を参照*
デフォルトでは、
facet.range.start
とfacet.range.end
の間の範囲ファセットを計算するために使用される範囲は、下限を含み、上限を含みません。facet.range.other
パラメータで定義された「before」範囲は排他的であり、「after」範囲は包含的です。以下の「lower」に相当するこのデフォルトでは、境界で二重カウントが発生しません。以下のオプションを使用して、facet.range.include
パラメータでこの動作を変更できます。-
lower
:すべてのギャップベースの範囲は、その下限を含みます。 -
upper
:すべてのギャップベースの範囲は、その上限を含みます。 -
edge
:最初と最後のギャップ範囲は、対応するupper/lowerオプションが指定されていない場合でも、エッジ境界(最初の範囲は下限、最後の範囲は上限)を含みます。 -
outer
:最初または最後の範囲にすでにこれらの境界が含まれている場合でも、「before」および「after」範囲は境界を含みます。 -
all
:すべてのオプション(lower
、upper
、edge
、outer
)を含みます。
このパラメータは、
f.<fieldname>.facet.range.include
の構文を使用してフィールドごとに指定でき、複数回指定して複数の選択肢を示すことができます。 -
二重カウントを避けるためには、lower とupper の両方を選択せず、outer を選択せず、all を選択しないでください。 |
facet.range.other
-
オプション
デフォルト: なし
facet.range.other
パラメータは、facet.range.start
とfacet.range.end
の間の各範囲制約のカウントに加えて、以下のオプションのカウントも計算する必要があることを指定します。-
before
:最初の範囲の下限より小さいフィールド値を持つすべてのレコード。 -
after
:最後の範囲の上限より大きいフィールド値を持つすべてのレコード。 -
between
:すべての範囲の開始境界と終了境界の間にあるフィールド値を持つすべてのレコード。 -
none
:カウントを計算しません。 -
all
:before、between、およびafterのカウントを計算します。
このパラメータは、
f.<fieldname>.facet.range.other
の構文を使用してフィールドごとに指定できます。all
オプションに加えて、このパラメータは複数回指定して複数の選択肢を示すことができますが、none
は他のすべてのオプションをオーバーライドします。 -
facet.range.method
-
オプション
デフォルト:
filter
facet.range.method
パラメータは、Solrが範囲ファセットに使用するアルゴリズムまたはメソッドのタイプを選択します。どちらのメソッドも同じ結果を生成しますが、パフォーマンスは異なる場合があります。- filter
-
このメソッドは、他の facet.range パラメータに基づいて範囲を生成し、それぞれに対してフィルタを実行します。このフィルタは、後でメインクエリの結果セットと交差してカウントを取得します。 filterCache を使用するため、すべての範囲を格納するのに十分な大きさのキャッシュがあればメリットがあります。
- dv
-
このメソッドは、メインクエリに一致するドキュメントを反復処理し、それぞれに対して値の正しい範囲を見つけます。このメソッドは、(フィールドで有効になっている場合)DocValues または fieldCache を使用します。
dv
メソッドは、フィールドタイプ DateRangeField または group.facets を使用している場合はサポートされていません。
日付範囲とタイムゾーン
日付フィールドの範囲ファセットは、 詳細については、日付の書式設定と日付演算 セクションの例を参照してください。 |
ピボット(決定木)ファセット
ピボットは、テーブルに格納されているデータの自動的な並べ替え、カウント、合計、または平均を可能にする集計ツールです。結果は通常、集計データを示す 2 番目のテーブルに表示されます。ピボットファセットを使用すると、複数のフィールドでドキュメントをファセットした結果のサマリーテーブルを作成できます。
別の見方をすれば、クエリは決定木を生成します。つまり、Solr は「ファセット A について、制約/カウントは X/N、Y/M などです。A を X で制約すると、B の制約カウントは S/P、T/Q などになります」と示します。言い換えれば、現在のファセット結果から制約を適用した場合、フィールドの「次の」ファセット結果のセットがどうなるかを事前に示します。
facet.pivot
-
オプション
デフォルト: なし
facet.pivot
パラメータは、ピボットに使用するフィールドを定義します。複数のfacet.pivot
値を指定すると、レスポンスに複数の「facet_pivot」セクションが作成されます。フィールドの各リストはコンマで区切ります。 facet.pivot.mincount
-
オプション
デフォルト:
1
facet.pivot.mincount
パラメータは、ファセットが結果に含まれるために必要な一致ドキュメントの最小数を定義します。「bin/solr -e techproducts」の例を使用すると、このクエリ URL は以下のデータを返します。ピボットファセットの結果は「facet_pivot」セクションにあります。
https://127.0.0.1:8983/solr/techproducts/select?q=*:*&facet.pivot=cat,popularity,inStock &facet.pivot=popularity,cat&facet=true&facet.field=cat&facet.limit=5&rows=0&facet.pivot.mincount=2
{ "facet_counts":{ "facet_queries":{}, "facet_fields":{ "cat":[ "electronics",14, "currency",4, "memory",3, "connector",2, "graphics card",2]}, "facet_dates":{}, "facet_ranges":{}, "facet_pivot":{ "cat,popularity,inStock":[{ "field":"cat", "value":"electronics", "count":14, "pivot":[{ "field":"popularity", "value":6, "count":5, "pivot":[{ "field":"inStock", "value":true, "count":5}]}] }]}}}
統計コンポーネントとピボットの組み合わせ
他のタイプのファセットでサポートされている一般的なローカルパラメータに加えて、stats
ローカルパラメータを facet.pivot
と共に使用して、各ピボット制約に対して計算するstats.field
インスタンスを(タグで)参照できます。
以下の例では、facet.pivot 結果階層のそれぞれに対して、2 つの異なる(重複する)統計セットが計算されます。
stats=true
stats.field={!tag=piv1,piv2 min=true max=true}price
stats.field={!tag=piv2 mean=true}popularity
facet=true
facet.pivot={!stats=piv1}cat,inStock
facet.pivot={!stats=piv2}manu,inStock
結果
{"facet_pivot":{
"cat,inStock":[{
"field":"cat",
"value":"electronics",
"count":12,
"pivot":[{
"field":"inStock",
"value":true,
"count":8,
"stats":{
"stats_fields":{
"price":{
"min":74.98999786376953,
"max":399.0}}}},
{
"field":"inStock",
"value":false,
"count":4,
"stats":{
"stats_fields":{
"price":{
"min":11.5,
"max":649.989990234375}}}}],
"stats":{
"stats_fields":{
"price":{
"min":11.5,
"max":649.989990234375}}}},
{
"field":"cat",
"value":"currency",
"count":4,
"pivot":[{
"field":"inStock",
"value":true,
"count":4,
"stats":{
"stats_fields":{
"price":{
"..."
"manu,inStock":[{
"field":"manu",
"value":"inc",
"count":8,
"pivot":[{
"field":"inStock",
"value":true,
"count":7,
"stats":{
"stats_fields":{
"price":{
"min":74.98999786376953,
"max":2199.0},
"popularity":{
"mean":5.857142857142857}}}},
{
"field":"inStock",
"value":false,
"count":1,
"stats":{
"stats_fields":{
"price":{
"min":479.95001220703125,
"max":479.95001220703125},
"popularity":{
"mean":7.0}}}}],
"..."}]}}}}]}]}}
ファセットクエリとファセット範囲のピボットファセットとの組み合わせ
query
ローカルパラメータを facet.pivot
と共に使用して、各ピボット制約に対して計算する facet.query
インスタンスを(タグで)参照できます。同様に、range
ローカルパラメータを facet.pivot
と共に使用して、facet.range
インスタンスを参照できます。
以下の例では、facet.pivot
結果階層のそれぞれに対して 2 つのクエリファセットが計算されます。
facet=true
facet.query={!tag=q1}manufacturedate_dt:[2006-01-01T00:00:00Z TO NOW]
facet.query={!tag=q1}price:[0 TO 100]
facet.pivot={!query=q1}cat,inStock
{"facet_counts": {
"facet_queries": {
"{!tag=q1}manufacturedate_dt:[2006-01-01T00:00:00Z TO NOW]": 9,
"{!tag=q1}price:[0 TO 100]": 7
},
"facet_fields": {},
"facet_dates": {},
"facet_ranges": {},
"facet_intervals": {},
"facet_heatmaps": {},
"facet_pivot": {
"cat,inStock": [
{
"field": "cat",
"value": "electronics",
"count": 12,
"queries": {
"{!tag=q1}manufacturedate_dt:[2006-01-01T00:00:00Z TO NOW]": 9,
"{!tag=q1}price:[0 TO 100]": 4
},
"pivot": [
{
"field": "inStock",
"value": true,
"count": 8,
"queries": {
"{!tag=q1}manufacturedate_dt:[2006-01-01T00:00:00Z TO NOW]": 6,
"{!tag=q1}price:[0 TO 100]": 2
}
},
"..."]}]}}}
同様に、以下の例では、facet.pivot
結果階層のそれぞれに対して 2 つの範囲ファセットが計算されます。
facet=true
facet.range={!tag=r1}manufacturedate_dt
facet.range.start=2006-01-01T00:00:00Z
facet.range.end=NOW/YEAR
facet.range.gap=+1YEAR
facet.pivot={!range=r1}cat,inStock
{"facet_counts":{
"facet_queries":{},
"facet_fields":{},
"facet_dates":{},
"facet_ranges":{
"manufacturedate_dt":{
"counts":[
"2006-01-01T00:00:00Z",9,
"2007-01-01T00:00:00Z",0,
"2008-01-01T00:00:00Z",0,
"2009-01-01T00:00:00Z",0,
"2010-01-01T00:00:00Z",0,
"2011-01-01T00:00:00Z",0,
"2012-01-01T00:00:00Z",0,
"2013-01-01T00:00:00Z",0,
"2014-01-01T00:00:00Z",0],
"gap":"+1YEAR",
"start":"2006-01-01T00:00:00Z",
"end":"2015-01-01T00:00:00Z"}},
"facet_intervals":{},
"facet_heatmaps":{},
"facet_pivot":{
"cat,inStock":[{
"field":"cat",
"value":"electronics",
"count":12,
"ranges":{
"manufacturedate_dt":{
"counts":[
"2006-01-01T00:00:00Z",9,
"2007-01-01T00:00:00Z",0,
"2008-01-01T00:00:00Z",0,
"2009-01-01T00:00:00Z",0,
"2010-01-01T00:00:00Z",0,
"2011-01-01T00:00:00Z",0,
"2012-01-01T00:00:00Z",0,
"2013-01-01T00:00:00Z",0,
"2014-01-01T00:00:00Z",0],
"gap":"+1YEAR",
"start":"2006-01-01T00:00:00Z",
"end":"2015-01-01T00:00:00Z"}},
"pivot":[{
"field":"inStock",
"value":true,
"count":8,
"ranges":{
"manufacturedate_dt":{
"counts":[
"2006-01-01T00:00:00Z",6,
"2007-01-01T00:00:00Z",0,
"2008-01-01T00:00:00Z",0,
"2009-01-01T00:00:00Z",0,
"2010-01-01T00:00:00Z",0,
"2011-01-01T00:00:00Z",0,
"2012-01-01T00:00:00Z",0,
"2013-01-01T00:00:00Z",0,
"2014-01-01T00:00:00Z",0],
"gap":"+1YEAR",
"start":"2006-01-01T00:00:00Z",
"end":"2015-01-01T00:00:00Z"}}},
"..."]}]}}}
インターバルファセット
サポートされているもう 1 つのファセット形式は、インターバルファセットです。これは範囲ファセットに似ていますが、機能的には範囲クエリを使用したファセットクエリに近いです。インターバルファセットを使用すると、可変インターバルを設定し、指定されたフィールド内のそれらのインターバル内に値を持つドキュメントの数をカウントできます。
範囲クエリを使用したファセットクエリで同じ機能を実現できますが、これら 2 つのメソッドの実装は大きく異なり、コンテキストに応じて異なるパフォーマンスが得られます。
検索のパフォーマンスが気になる場合は、両方のオプションでテストする必要があります。インターバルファセットは、同じフィールドに複数のインターバルがある場合に適している傾向があり、ファセットクエリは、フィルタキャッシュがより効果的な環境(静的インデックスなど)で適している傾向があります。
このメソッドは、フィールドで有効になっている場合、DocValues を使用し、それ以外の場合は fieldCache を使用します。
インターバルファセットには、次のパラメータを使用します。
facet.interval
-
オプション
デフォルト: なし
このパラメータは、インターバルファセットを適用する必要があるフィールドを示します。同じリクエストで複数回使用して、複数のフィールドを示すことができます。
facet.interval=price&facet.interval=size
facet.interval.set
-
オプション
デフォルト: なし
このパラメータは、フィールドのインターバルを設定するために使用されます。複数回指定して、複数のインターバルを示すことができます。このパラメータはグローバルです。つまり、特定のフィールドのオーバーライドがない限り、
facet.interval
で示されたすべてのフィールドに使用されます。特定のフィールドでこのパラメータをオーバーライドするには、f.<fieldname>.facet.interval.set
を使用します。次に例を示します。f.price.facet.interval.set=[0,10]&f.price.facet.interval.set=(10,100]
インターバル構文
インターバルは '(' または '[' で始まり、開始値、コンマ(',')、終了値、そして ')' または ']' で終わる必要があります。
次に例を示します。
-
(1,10) → 1 より大きく 10 より小さい値が含まれます
-
[1,10) → 1 以上 10 未満の値が含まれます
-
[1,10] → 1 以上 10 以下の値が含まれます
開始値と終了値を空にすることはできません。
インターバルを無制限にする必要がある場合は、開始と終了の両方の制限に特殊文字 *
を使用できます。この特殊文字を使用する場合、開始構文オプション ((
と [
) と終了構文オプション ()
と ]
) は同じように扱われます。 [*,*]
には、フィールドに値を持つすべてのドキュメントが含まれます。
インターバルの制限は文字列にすることができますが、引用符を追加する必要はありません。コンマまでのすべてのテキストは開始制限として扱われ、それ以降のテキストは終了制限として扱われます。例:[Buenos Aires,New York]
。文字列インターバル内のドキュメントを照合するために、文字列のような比較が行われることに注意してください(大文字と小文字は区別されます)。比較子は変更できません。
コンマ、括弧、角かっこは、前に \
を付けることでエスケープできます。値の前後の空白は省略されます。
開始制限は終了制限より大きくすることはできません。制限が等しいことは許可されています。これにより、[A,A]
、[B,B]
、[C,Z]
など、カウントする特定の値を示すことができます。
インターバルファセットは、以下で説明する出力キーの置換をサポートしています。出力キーは、facet.interval パラメータ
と facet.interval.set パラメータ
の両方で置き換えることができます。次に例を示します。
&facet.interval={!key=popularity}some_field
&facet.interval.set={!key=bad}[0,5]
&facet.interval.set={!key=good}[5,*]
&facet=true
ファセットのローカルパラメータ
ローカルパラメータ構文を使用すると、グローバル設定をオーバーライドできます。また、XML 属性と同様に、他のパラメータ値にメタデータを追加する方法を提供することもできます。
フィルタのタグ付けと除外
特定のフィルタにタグを付け、ファセット時にそれらのフィルタを除外できます。これは、複数選択ファセットを行う場合に役立ちます。
ファセットを使用した次のクエリ例を考えてみましょう。
q=mainquery&fq=status:public&fq=doctype:pdf&facet=true&facet.field=doctype
すべてがすでにフィルタ doctype:pdf
によって制約されているため、facet.field=doctype
ファセットコマンドは現在冗長であり、doctype:pdf
以外のすべてに対して 0 カウントを返します。
doctype の複数選択ファセットを実装するために、GUI は、doctype:pdf
制約がまだ適用されていないかのように、他の doctype 値とその関連するカウントを引き続き表示したい場合があります。次に例を示します。
=== Document Type ===
[ ] Word (42)
[x] PDF (96)
[ ] Excel(11)
[ ] HTML (63)
現在選択されていない doctype 値のカウントを返すには、doctype を直接制約するフィルタにタグを付け、doctype でファセットを行うときにそれらのフィルタを除外します。
q=mainquery&fq=status:public&fq={!tag=dt}doctype:pdf&facet=true&facet.field={!ex=dt}doctype
フィルタの除外は、すべてのタイプのファセットでサポートされています。 tag
と ex
の両方のローカルパラメータは、コンマで区切ることで複数の値を指定できます。
出力キーの変更
ファセットコマンドの出力キーを変更するには、key
ローカルパラメータで新しい名前を指定します。次に例を示します。
facet.field={!ex=dt key=mylabel}doctype
上記のパラメータ設定により、「doctype」フィールドのフィールドファセットの結果は、レスポンスで「doctype」ではなく「mylabel」キーを使用して返されます。これは、異なる除外で同じフィールドで複数回ファセットを行う場合に役立ちます。
特定の用語でのファセットの制限
フィールドファセットを特定の用語に制限するには、terms
ローカルパラメータでコンマ区切りで指定します。用語のコンマと引用符は、\,
のようにバックスラッシュでエスケープできます。この場合、ファセットは facet.method=enum
と同様の方法で計算されますが、facet.enum.cache.minDf
は無視されます。次に例を示します。
facet.field={!terms='alfa,betta,with\,with\',with space'}symbol
このローカルパラメータは、facet.sort
のデフォルトロジックをオーバーライドします。 facet.sort
が省略された場合、ファセットは指定された用語の順序で返されます。これは、index
と count
の値で変更される可能性があります。注:このパラメータが指定されている場合、他のパラメータは完全にサポートされない場合があります。