如何在Apache Solr中对结果数据集使用median中位数统计功能
如何调用Solr功能计算查询结果集的中位数
基础说明
Solr没有单独的
median专用函数,6.5及以上版本提供的percentile百分位聚合函数可直接实现中位数计算:中位数本质是第50百分位数值,传入参数50即可得到对应结果。
具体实现方案
方案1:对已获取的行级结果自行计算
如果已经拿到全量行级结果,无需再次调用Solr:
- 提取结果集中需要计算的数值字段的所有值,按大小排序
- 数据总数为奇数时,取排序后中间位置的数值即为中位数;数据总数为偶数时,取中间两个数值的平均值即为中位数
方案2:复用原查询条件调用Solr接口直接获取中位数(推荐)
无需自行处理排序逻辑,直接复用你之前获取行级结果的查询条件,调整为聚合查询即可,两种常用实现方式如下:
方式A:使用JSON Facet实现
请求参数示例:
q=你的原查询主条件 fq=你的原过滤条件1&fq=你的原过滤条件2 rows=0 # 无需返回行级明细,仅返回聚合结果 json.facet={ "target_median": "percentile(待计算的数值字段名,50)" }
方式B:使用Stats组件实现
请求参数示例:
q=你的原查询主条件 fq=你的原过滤条件1&fq=你的原过滤条件2 stats=true stats.field={!percentiles="50"}待计算的数值字段名 rows=0
调用后返回结果中会直接返回对应字段的50百分位值,即所求中位数。
注意事项
- 仅支持数值类型字段(int、long、float、double等),字符串、日期等非数值类型字段无法直接计算
- 大数据量场景下
percentile默认返回近似值,若需要100%精确中位数,可添加参数percentileAccuracy=100,该配置会提升内存占用和查询耗时
内容的提问来源于stack exchange,提问作者PT15
相关产品推荐
相关产品推荐

