統計元件

統計元件會針對文件集中數值、字串和日期欄位傳回簡單的統計資料。

本節中的範例查詢假設您正在執行 Solr 隨附的「techproducts」範例

bin/solr start -e techproducts

統計元件參數

統計元件接受下列參數

stats

選用

預設值:false

如果為 true,則會調用統計元件。

stats.field

必要

預設值:無

指定應產生統計資料的欄位。此參數可以在查詢中多次調用,以要求多個欄位的統計資料。

本機參數可以用來指出應計算的支援統計資料子集,以及/或應在任意數值函式(或查詢)結果(而不是簡單的欄位名稱)上計算統計資料。請參閱以下範例。

統計元件範例

以下查詢示範如何針對兩個不同的數值欄位計算統計資料,以及使用 text 欄位針對 termfreq() 函式呼叫的結果計算統計資料

https://127.0.0.1:8983/solr/techproducts/select?q=*:*&wt=xml&stats=true&stats.field={!func}termfreq('text','memory')&stats.field=price&stats.field=popularity&rows=0&indent=true
<lst name="stats">
  <lst name="stats_fields">
    <lst name="termfreq(text,memory)">
      <double name="min">0.0</double>
      <double name="max">3.0</double>
      <long name="count">32</long>
      <long name="missing">0</long>
      <double name="sum">10.0</double>
      <double name="sumOfSquares">22.0</double>
      <double name="mean">0.3125</double>
      <double name="stddev">0.7803018439949604</double>
      <lst name="facets"/>
    </lst>
    <lst name="price">
      <double name="min">0.0</double>
      <double name="max">2199.0</double>
      <long name="count">16</long>
      <long name="missing">16</long>
      <double name="sum">5251.270030975342</double>
      <double name="sumOfSquares">6038619.175900028</double>
      <double name="mean">328.20437693595886</double>
      <double name="stddev">536.3536996709846</double>
      <lst name="facets"/>
    </lst>
    <lst name="popularity">
      <double name="min">0.0</double>
      <double name="max">10.0</double>
      <long name="count">15</long>
      <long name="missing">17</long>
      <double name="sum">85.0</double>
      <double name="sumOfSquares">603.0</double>
      <double name="mean">5.666666666666667</double>
      <double name="stddev">2.943920288775949</double>
      <lst name="facets"/>
    </lst>
  </lst>
</lst>

支援的統計資料

下表說明統計元件支援的統計資料。並非所有統計資料都支援所有欄位類型,而且並非預設計算所有統計資料(詳細資訊請參閱以下搭配統計元件的本機參數

min

集合中所有文件中欄位/函式的最小值。此統計資料是針對所有欄位類型計算,並且是預設計算。

max

集合中所有文件中欄位/函式的最大值。此統計資料是針對所有欄位類型計算,並且是預設計算。

sum

集合中所有文件中欄位/函數的所有值的總和。此統計資訊是針對數值和日期欄位類型計算的,預設會計算。

計數

集合中所有文件中此欄位/函數找到的值的數量。此統計資訊是針對所有欄位類型計算的,預設會計算。

遺失

集合中沒有此欄位/函數值的文件的數量。此統計資訊是針對所有欄位類型計算的,預設會計算。

平方和

所有值的平方和(計算標準差的副產品)。此統計資訊是針對數值和日期欄位類型計算的,預設會計算。

平均值

平均值 (v1 + v2 …​. + vN)/N。此統計資訊是針對數值和日期欄位類型計算的,預設會計算。

標準差

標準差,測量資料集中值的分散程度。此統計資訊是針對數值和日期欄位類型計算的,預設會計算。

百分位數

基於參數值指定的截斷點(例如 1,99,99.9)的百分位數值清單。這些值是近似值,使用 t-digest 演算法。此統計資訊是針對數值欄位類型計算的,預設不計算。

相異值

集合中所有文件中此欄位/函數的所有相異值集合。對於基數不小的欄位,此計算可能會非常耗費資源。此統計資訊是針對所有欄位類型計算的,但預設不計算。

相異值計數

集合中所有文件中此欄位/函數的確切相異值數量。對於基數不小的欄位,此計算可能會非常耗費資源。此統計資訊是針對所有欄位類型計算的,但預設不計算。

基數

集合中所有文件中此欄位/函數相異值的數量之統計近似值(目前使用 HyperLogLog 演算法)。此計算比使用 countDistinct 選項效率高得多,但可能不是 100% 準確。

此選項的輸入可以是介於 0.01.0 之間的浮點數,表示演算法應嘗試準確的程度:0.0 表示盡可能使用最少的記憶體;1.0 表示盡可能使用足夠的記憶體以達到盡可能高的準確度。true 支援作為 0.3 的別名。

此統計資訊是針對所有欄位類型計算的,但預設不計算。

統計元件的本地參數

Facet 元件 類似,stats.field 參數支援用於以下的本地參數:

  • 標記與排除篩選器:stats.field={!ex=filterA}price

  • 變更輸出鍵:stats.field={!key=my_price_stats}price

  • facet.pivot 一起使用 標記統計資訊:stats.field={!tag=my_pivot_stats}price

本地參數也可以用於按名稱指定個別統計資訊,覆寫預設計算的統計資訊集,例如,stats.field={!min=true max=true percentiles='99,99.9,99.99'}price

如果透過本地參數指定任何支援的統計資訊,則會覆寫整個預設統計資訊集,並且僅計算請求的統計資訊。

在某些情況下,支援額外的「專家」本地參數來影響某些統計資訊的行為

  • 百分位數

    • tdigestCompression - 一個預設為 100.0 的正數值,控制 T-Digest 的壓縮因子。較大的值表示更高的準確度,但也會使用更多的記憶體。

  • 基數

    • hllPreHashed - 一個布林選項,表示統計資訊是在索引時已雜湊的「long」欄位上計算的,允許 HLL 計算跳過此步驟。

    • hllLog2m - 一個整數值,指定要使用的明確「log2m」值,覆寫由基數本地參數和欄位類型確定的啟發式值 - 如需更多詳細資訊,請參閱 java-hll 文件

    • hllRegwidth - 一個整數值,指定要使用的明確「regwidth」值,覆寫由基數本地參數和欄位類型確定的啟發式值 - 如需更多詳細資訊,請參閱 java-hll 文件

本地參數範例

在這裡,我們計算價格欄位的一些統計資訊。針對所有庫存中的產品(q=:fq=inStock:true)計算最小值、最大值、平均值、第 90 個和第 99 個百分位數價格值,並獨立地針對所有產品(無論是否庫存)計算所有預設統計資訊(透過排除該篩選器)。

https://127.0.0.1:8983/solr/techproducts/select?q=*:*&fq={!tag=stock_check}inStock:true&stats=true&stats.field={!ex=stock_check+key=instock_prices+min=true+max=true+mean=true+percentiles='90,99'}price&stats.field={!key=all_prices}price&rows=0&indent=true&wt=xml
<lst name="stats">
  <lst name="stats_fields">
    <lst name="instock_prices">
      <double name="min">0.0</double>
      <double name="max">2199.0</double>
      <double name="mean">328.20437693595886</double>
      <lst name="percentiles">
        <double name="90.0">564.9700012207031</double>
        <double name="99.0">1966.6484985351556</double>
      </lst>
    </lst>
    <lst name="all_prices">
      <double name="min">0.0</double>
      <double name="max">2199.0</double>
      <long name="count">12</long>
      <long name="missing">5</long>
      <double name="sum">4089.880027770996</double>
      <double name="sumOfSquares">5385249.921747174</double>
      <double name="mean">340.823335647583</double>
      <double name="stddev">602.3683083752779</double>
    </lst>
  </lst>
</lst>

統計元件和分面

使用樞紐分面時,可以使用 tag 來參考 stats.field 參數集,以便在樞紐約束樹的每個層級(即欄位)計算多個統計資訊。

如需更多資訊和詳細範例,請參閱 將統計元件與樞紐結合