分面

分面是根據索引詞將搜尋結果安排成類別。

搜尋者會看到索引詞,以及每個詞彙找到多少個相符文件的數字計數。分面可讓使用者輕鬆探索搜尋結果,並縮小範圍以精確找出他們正在尋找的結果。

另請參閱 JSON 分面 API,以取得另一種方法。

一般分面參數

有兩個用於控制分面的一般參數。

facet

必要

預設值:false

如果設定為 true,此參數會啟用查詢回應中的分面計數。如果設定為 false、空白或遺失值,此參數會停用分面。除非此參數設定為 true,否則下列列出的其他參數都不會產生任何效果。

facet.query

選用

預設值:無

在 Lucene 預設語法中指定任意查詢以產生分面計數。

依預設,Solr 的分面功能會自動判斷欄位的唯一詞彙,並傳回每個詞彙的計數。使用 facet.query,您可以覆寫此預設行為,並精確選取您想要計數的詞彙或表達式。在典型的分面實作中,您將指定許多 facet.query 參數。此參數對於數值範圍型分面或字首型分面特別有用。

您可以多次設定 facet.query 參數,以指出應使用多個查詢作為個別的分面條件約束。

若要在預設語法以外的語法中使用分面查詢,請在分面查詢前面加上查詢表示法的名稱。例如,若要使用假設的 myfunc 查詢剖析器,您可以像這樣設定 facet.query 參數

facet.query={!myfunc}name~fred

欄位值分面參數

可以使用數個參數,根據欄位中索引的詞彙觸發分面。

當使用這些參數時,請務必記住,「term」(詞彙)在 Lucene 中是一個非常特定的概念:它指的是在任何分析發生後被索引的字面欄位/值配對。對於包含詞幹提取、小寫轉換或斷詞的文字欄位,產生的詞彙可能與您預期的不同。

如果您希望 Solr 對完整的字面字串執行分析(用於搜尋)和分面,請在您的 Schema 中使用 copyField 指令來建立該欄位的兩個版本:一個 Text 和一個 String。Text 欄位如果用於搜尋但不用於分面,則應具有 indexed="true" docValues="false",而 String 欄位如果用於分面但不用於搜尋,則應具有 indexed="false" docValues="true"。(有關 copyField 指令的更多資訊,請參閱 複製欄位。)

除非另有說明,否則以下所有參數都可以使用 f.<fieldname>.facet.<parameter> 的語法,在每個欄位的基礎上指定。

facet.field

選用

預設值:無

識別應視為分面的欄位。它會迭代欄位中的每個 Term,並使用該 Term 作為約束產生分面計數。可以在查詢中多次指定此參數,以選擇多個分面欄位。

如果您沒有將此參數設定為 schema 中至少一個欄位,則本節中描述的所有其他參數都不會產生任何效果。
facet.prefix

選用

預設值:無

將分面的詞彙限制為以給定字串前綴開頭的詞彙。這不會以任何方式限制查詢,只會限制回應查詢時返回的分面。

facet.contains

選用

預設值:無

將分面的詞彙限制為包含給定子字串的詞彙。這不會以任何方式限制查詢,只會限制回應查詢時返回的分面。

facet.contains.ignoreCase

選用

預設值:無

如果設定為 true,則在將 facet.contains 子字串與候選分面詞彙匹配時,會忽略大小寫。

facet.matches

選用

預設值:無

僅返回與此正則表達式匹配的詞彙的分面桶。

facet.sort

選用

預設值:無

分面欄位詞彙的排序。有兩個選項

count

先返回按計數最高排序的詞彙。

index

返回按詞彙順序排序的詞彙。對於 ASCII 範圍內的詞彙,這將按字母順序排序。

如果 facet.limit 大於 0,則預設值為 count,否則,預設值為 index。請注意,當使用特定詞彙限制分面時,預設邏輯會變更。

facet.limit

選用

預設值:100

返回的分面計數數量。負值表示 Solr 將返回所有計數。

facet.offset

選用

預設值:0

返回的分面清單的偏移量,以允許分頁。

facet.mincount

選用

預設值:0

分面欄位要包含在回應中所需的最小計數。如果欄位的計數低於最小值,則不會返回該欄位的分面。

facet.missing

選用

預設值:false

如果設定為 true,此參數表示,除了分面欄位基於 Term 的約束之外,還應計算並在回應中返回符合查詢但該欄位沒有分面值的所有結果的計數。

facet.method

選用

預設值:fc

選擇分面欄位時要使用的演算法或方法類型。

可以使用以下方法。

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 的記憶體使用量,但會增加處理查詢所需的時間。如果您要在具有大量詞彙的欄位上分面,並且想要減少記憶體使用量,請嘗試將此參數設定為 2550 之間的值,並執行一些測試。然後,根據需要最佳化參數設定。

預設值為 0,這會導致 filterCache 用於欄位中的所有詞彙。

facet.exists

選用

預設值:無

若要將分面計數限制為 1,請指定 facet.exists=true。此參數可以與 facet.method=enum 一起使用,或在省略時使用。它只能用於非 Trie 欄位(例如字串)。它可以加速大型索引和/或高基數分面值的分面計數。

facet.excludeTerms

選用

預設值:無

從分面計數中移除詞彙,但將它們保留在索引中。

facet.overrequest.countfacet.overrequest.ratio

選用

預設值:請參閱說明

在某些情況下,透過從每個個別的 shard 「過度要求」所需的約束數量(即 facet.limit),可以提高在分散式 Solr 查詢中選擇分面的「最上方」約束的準確性。在這些情況下,預設會要求每個 shard 提供最上方的 10 + (1.5 * facet.limit) 個約束。

根據您的文件在 shard 間的分割方式以及您使用的 facet.limit 值,您可能會發現增加或減少 Solr 執行過度要求是有利的。這可以透過設定 facet.overrequest.count(預設為 10)和 facet.overrequest.ratio(預設為 1.5)參數來實現。

facet.threads

選用

預設值:0

用於載入分面中使用的基礎欄位的最大並行執行緒數量。

省略此參數或將執行緒計數指定為 0 將不會產生任何執行緒,並且只會使用主要請求執行緒。指定負數執行緒將建立最多 Integer.MAX_VALUE 個執行緒。

範圍分面

您可以在任何日期欄位或任何支援範圍查詢的數字欄位上使用範圍分面。這對於將一系列範圍查詢(如按查詢分面)縫合在一起以用於價格之類的事物特別有用。

facet.range

必要

預設值:無

Solr 應為其建立範圍分面的欄位。例如

facet.range=price&facet.range=age
facet.range=lastModified_dt
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

必要

預設值:無

範圍的上限。您可以使用 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.gap 無法在 facet.range.startfacet.range.end 之間均勻分割的情況。

如果為 true,則最後一個範圍約束會將 facet.range.end 值作為上限。如果為 false,則最後一個範圍將具有大於 facet.range.end 的最小可能上限,因此範圍是指定範圍間隙的確切寬度。

可以使用語法 f.<fieldname>.facet.range.hardend 在每個欄位的基礎上指定此參數。

facet.range.include

選用

預設值:請參閱說明

預設情況下,用於計算 facet.range.startfacet.range.end 之間範圍分面的範圍會包含下限,但不包含上限。使用 facet.range.other 參數定義的「之前」範圍不包含,而「之後」範圍則包含。此預設值等同於以下的「lower」,不會導致邊界處重複計數。您可以使用 facet.range.include 參數,透過以下選項修改此行為

  • lower:所有基於間隙的範圍都包含其下限。

  • upper:所有基於間隙的範圍都包含其上限。

  • edge:第一個和最後一個間隙範圍包含其邊界(第一個的下限,最後一個的上限),即使未指定對應的上限/下限選項也是如此。

  • outer:「之前」和「之後」範圍將包含其邊界,即使第一個或最後一個範圍已包含這些邊界也是如此。

  • all:包含所有選項:lowerupperedgeouter

您可以使用 f.<fieldname>.facet.range.include 的語法,在每個欄位的基礎上指定此參數,並且可以多次指定它以表示多個選項。

為了確保避免重複計數,請勿同時選擇 lowerupper,請勿選擇 outer,並且請勿選擇 all
facet.range.other

選用

預設值:無

除了 facet.range.startfacet.range.end 之間每個範圍約束的計數之外,還會計算這些選項的計數

  • before:所有欄位值低於第一個範圍下限的記錄。

  • after:所有欄位值大於最後一個範圍上限的記錄。

  • between:所有欄位值介於所有範圍的開始和結束邊界之間的記錄。

  • none:不計算任何計數。

  • all:計算 before、between 和 after 的計數。

此參數可以針對每個欄位指定,語法為 f.<fieldname>.facet.range.other。除了 all 選項外,此參數可以多次指定以表示多個選擇,但 none 將會覆蓋所有其他選項。

facet.range.method

選用

預設值:filter

選擇用於範圍分面的演算法或方法類型。兩種方法都會產生相同的結果,但效能可能會有所不同。

filter

根據其他 facet.range 參數產生範圍,並針對每個範圍執行一個篩選器,該篩選器稍後會與主要查詢結果集相交,以取得計數。它會使用 filterCache,因此能受益於足夠大的快取來包含所有範圍。

dv

迭代符合主要查詢的文件,並針對每個文件找到該值的正確範圍。此方法會使用 DocValues (如果已針對欄位啟用) 或 fieldCache。dv 方法不支援 DateRangeField 欄位類型,或在使用 group.facets 時。

日期範圍與時區

日期欄位的範圍分面是一種常見情況,其中 TZ 參數可能很有用,以確保「每天的分面計數」或「每月的分面計數」是基於給定日期/月份相對於特定時區「開始」的有意義定義。

如需更多資訊,請參閱 日期格式化和日期數學 章節中的範例。

範圍分面中的 facet.mincount

facet.mincount 參數,與欄位分面中使用的參數相同,也適用於範圍分面。使用時,任何計數低於最小值的範圍都不會包含在回應中。

樞紐 (決策樹) 分面

樞紐分析是一種摘要工具,可讓您自動排序、計數、加總或平均表格中儲存的資料。結果通常會顯示在第二個表格中,顯示摘要資料。樞紐分面可讓您建立多個欄位分面文件的結果摘要表。

另一種看待它的方式是,查詢會產生決策樹,因為 Solr 會告訴您「對於分面 A,限制/計數為 X/N、Y/M 等。如果您要將 A 限制為 X,則 B 的限制計數將為 S/P、T/Q 等。」換句話說,它會預先告訴您,如果您應用目前分面結果的限制,則欄位的「下一個」分面結果集會是什麼。

facet.pivot

選用

預設值:無

用於樞紐分析的欄位。多個 facet.pivot 值將會在回應中建立多個 "facet_pivot" 區段。使用逗號分隔每個欄位清單。

facet.pivot.mincount

選用

預設值:1

為了將分面納入結果中,需要比對的最小文件數。

使用「bin/solr start -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 結果階層計算兩組不同的 (重疊) 統計資料

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 實例。

在下面的範例中,針對 h 的 facet.pivot 結果階層計算兩個查詢分面

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 結果階層計算兩個範圍分面

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"}}},
                  "..."]}]}}}

其他樞紐參數

雖然 facet.pivot.mincount 在名稱上與欄位分面使用的 facet.mincount 參數有所不同,但上述許多分面參數也可以與樞紐分面一起使用

  • facet.limit

  • facet.offset

  • facet.sort

  • facet.overrequest.count

  • facet.overrequest.ratio

間隔分面

另一個支援的分面形式是間隔分面。這聽起來類似於範圍分面,但功能實際上更接近於使用範圍查詢來執行分面查詢。間隔分面可讓您設定變數間隔,並計算指定欄位中具有這些間隔內的值的文件數。

即使可以使用具有範圍查詢的分面查詢來實現相同的功能,但這兩種方法的實作方式截然不同,並且會根據上下文提供不同的效能。

如果您擔心搜尋效能,應該測試這兩個選項。間隔分面在同一個欄位有多個間隔時往往更好,而分面查詢在篩選器快取更有效率的環境 (例如靜態索引) 中往往更好。

如果已針對欄位啟用 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

分面的本地參數

LocalParams 語法 允許覆寫全域設定。它也可以提供一種方法,將中繼資料新增至其他參數值,很像 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 值及其相關聯的計數,就好像尚未套用 doctype:pdf 限制一樣。例如

=== 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

所有類型的分面都支援篩選器排除。tagex 本地參數都可以透過逗號分隔指定多個值。

變更輸出金鑰

若要變更分面命令的輸出金鑰,請使用 key 本地參數指定新名稱。例如

facet.field={!ex=dt key=mylabel}doctype

上述參數設定會導致「doctype」欄位的欄位分面結果在回應中使用金鑰 "mylabel" 而不是 "doctype" 傳回。當多次使用不同的排除對同一個欄位執行分面時,這可能會很有幫助。

使用特定詞彙限制分面

若要使用特定詞彙限制欄位分面,請使用 terms 本地參數以逗號分隔指定它們。詞彙中的逗號和引號可以使用反斜線逸出,如 \, 中所示。在這種情況下,會以類似於 facet.method=enum 的方式計算分面,但會忽略 facet.enum.cache.minDf。例如

facet.field={!terms='alfa,betta,with\,with\',with space'}symbol

此本地參數會覆寫 facet.sort 的預設邏輯。如果省略 facet.sort,則會以給定的詞彙順序傳回分面,此順序可能會使用 indexcount 值變更。注意:當提供此參數時,可能不完全支援其他參數。

請參閱 空間搜尋,以取得依距離分面和透過分面產生熱點圖的範例。

請參閱 json.nl,以取得關於 json.nl 參數的詳細資料,該參數用於在使用 JSON 回應寫入器時控制寫出欄位分面資料的格式。