統計元件
統計元件會針對文件集中數值、字串和日期欄位傳回簡單的統計資料。
本節中的範例查詢假設您正在執行 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.0
和1.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 的壓縮因子。較大的值表示更高的準確度,但也會使用更多的記憶體。
-
-
基數
本地參數範例
在這裡,我們計算價格欄位的一些統計資訊。針對所有庫存中的產品(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
參數集,以便在樞紐約束樹的每個層級(即欄位)計算多個統計資訊。
如需更多資訊和詳細範例,請參閱 將統計元件與樞紐結合。