统计组件
统计组件返回文档集中数字、字符串和日期字段的简单统计信息。
本节中的示例查询假定您正在运行 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
-
集合中所有文档中字段/函数的所有值之和。为数值和日期字段类型计算此统计信息,并且默认情况下计算此统计信息。
count
-
此字段/函数在集合中所有文档中找到的值的数量。为所有字段类型计算此统计信息,并且默认情况下计算此统计信息。
missing
-
数据集中此字段/函数没有值的文档数量。此统计信息针对所有字段类型计算,默认情况下计算。
平方和
-
所有值的平方和(计算标准差的副产品)。此统计信息针对数值和日期字段类型计算,默认情况下计算。
平均值
-
平均值
(v1 + v2 …. + vN)/N
。此统计信息针对数值和日期字段类型计算,默认情况下计算。 标准差
-
标准差,衡量数据集中值的分布范围。此统计信息针对数值和日期字段类型计算,默认情况下计算。
百分位数
-
基于参数值指定的截止点的百分位数列表,例如
1,99,99.9
。这些值是近似值,使用 t-digest 算法。此统计信息针对数值字段类型计算,默认情况下不计算。 不同值
-
数据集中所有文档中字段/函数的所有不同值的集合。对于基数不小的字段,此计算可能非常耗时。此统计信息针对所有字段类型计算,但默认情况下不计算。
不同计数
-
数据集中所有文档中字段/函数中不同值的确切数量。对于基数不小的字段,此计算可能非常耗时。此统计信息针对所有字段类型计算,但默认情况下不计算。
基数
-
对数据集中所有文档中字段/函数中不同值的数量进行统计近似(目前使用 HyperLogLog 算法)。此计算比使用
countDistinct
选项效率高得多,但可能不是 100% 准确。此选项的输入可以是介于
0.0
和1.0
之间的浮点数,表示算法应尝试精确的程度:0.0
表示尽可能少地使用内存;1.0
表示尽可能多地使用内存以尽可能准确。true
被支持为0.3
的别名。此统计信息针对所有字段类型计算,但默认情况下不计算。
统计组件的局部参数
与 分面组件 类似,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 的压缩因子。值越大意味着精度越高,但也使用更多内存。
-
-
基数
局部参数示例
在这里,我们计算 price 字段的一些统计信息。针对所有库存产品(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>
统计组件和分面
在使用 Pivot 分面时,可以使用 tag
引用 stats.field
参数集,以便在透视约束树的每个级别(即字段)计算多个统计信息。
有关更多信息和详细示例,请参阅 将统计组件与透视结合使用。