统计组件
统计组件返回文档集中数字、字符串和日期字段的简单统计信息。
本节中的示例查询假定您正在运行 Solr 附带的“techproducts”示例
bin/solr start -e techproducts统计组件参数
统计组件接受以下参数
- stats
- 
可选 默认值: false如果为 true,则调用统计组件。
- stats.field
- 
必填 默认值:无 指定应为其生成统计信息的字段。此参数可以在查询中多次调用,以便请求多个字段的统计信息。 本地参数可用于指示应计算受支持的统计信息的子集,和/或应基于任意数值函数(或查询)的结果计算统计信息,而不是简单的字段名称。 请参见下面的示例。 
统计组件示例
以下查询演示了如何针对两个不同的数值字段计算统计信息,以及如何使用 text 字段,对 termfreq() 函数调用的结果计算统计信息
https://: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://: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 参数集,以便在透视约束树的每个级别(即字段)计算多个统计信息。
有关更多信息和详细示例,请参阅 将统计组件与透视结合使用。