统计组件
Stats 组件返回文档集中数字、字符串和日期字段的简单统计信息。
本部分中的示例查询假定您正在运行 Solr 随附的“techproducts”示例
bin/solr -e techproducts
Stats 组件参数
Stats 组件接受以下参数
stats
-
可选
默认值:
false
如果为
true
,则调用 Stats 组件。 stats.field
-
必需
默认值:无
指定应生成统计信息的字段。此参数可以在查询中多次调用,以便请求多个字段的统计信息。
局部参数可用于指示应计算受支持统计信息的一个子集,和/或应计算任意数字函数(或查询)结果的统计信息,而不是简单字段名称。请参见以下示例。
Stats 组件示例
以下查询演示了计算两个不同字段的数字字段的统计信息,以及使用 text
字段计算 termfreq()
函数调用结果的统计信息
http://localhost: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>
受支持的统计信息
下表说明了 Stats 组件支持的统计信息。并非所有统计信息都受所有字段类型支持,也并非所有统计信息都默认计算(有关详细信息,请参见下面的 Stats 组件的局部参数)
min
-
集合中所有文档中字段/函数的最小值。此统计信息针对所有字段类型计算,并默认计算。
max
-
集合中所有文档中字段/函数的最大值。此统计信息针对所有字段类型计算,并且默认计算。
sum
-
集合中所有文档中字段/函数的所有值的总和。此统计信息针对数字和日期字段类型计算,并且默认计算。
count
-
此字段/函数在集合中所有文档中找到的值的数量。此统计信息针对所有字段类型计算,并且默认计算。
missing
-
集合中没有此字段/函数值的文档数量。此统计信息针对所有字段类型计算,并且默认计算。
sumOfSquares
-
所有值平方和(计算 stddev 的副产品)。此统计信息针对数字和日期字段类型计算,并且默认计算。
mean
-
平均值
(v1 + v2 …. + vN)/N
。此统计信息针对数字和日期字段类型计算,并且默认计算。 stddev
-
标准偏差,衡量数据集中值的分布范围。此统计信息针对数字和日期字段类型计算,并且默认计算。
percentiles
-
基于参数值指定的临界点(例如
1,99,99.9
)的百分位数值列表。这些值是近似值,使用 t-digest 算法。此统计信息针对数字字段类型计算,并且默认不计算。 distinctValues
-
集合中所有文档中字段/函数的所有不同值的集合。对于基数不小的字段,此计算可能非常昂贵。此统计信息针对所有字段类型计算,但默认不计算。
countDistinct
-
集合中所有文档中字段/函数中不同值的准确数量。对于基数不小的字段,此计算可能非常昂贵。此统计信息针对所有字段类型计算,但默认不计算。
cardinality
-
对集合中所有文档的字段/函数中不同值数量的统计近似(目前使用 HyperLogLog 算法)。此计算比使用
countDistinct
选项效率更高,但可能不是 100% 准确。此选项的输入可以是介于
0.0
和1.0
之间的浮点数,表示算法应尝试达到何种准确度:0.0
表示尽可能少地使用内存;1.0
表示尽可能多地使用内存以达到尽可能高的准确度。true
受支持,作为0.3
的别名。此统计信息针对所有字段类型计算,但默认情况下不计算。
使用 Stats 组件的本地参数
类似于 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
。
如果通过本地参数指定了任何受支持的统计信息,则整个默认统计信息集将被覆盖,并且只计算请求的统计信息。 |
在某些情况下,还支持其他“专家”本地参数,以影响某些统计信息的执行
-
percentiles
-
tdigestCompression
- 一个正数值,默认为100.0
,用于控制 T-Digest 的压缩因子。值越大,准确度越高,但使用的内存也越多。
-
-
cardinality
使用局部参数的示例
此处我们计算价格字段的一些统计信息。针对所有有库存的产品(q=:
和 fq=inStock:true
)计算价格的最小值、最大值、平均值、90th 和 99th 百分位数,并且独立地针对所有产品(无论是否有库存)计算所有默认统计信息(通过排除该过滤器)。
http://localhost: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
参数集,以便在枢轴约束树中的每个级别(即字段)计算多个统计信息。
有关更多信息和详细示例,请参阅 将统计组件与枢轴结合使用。