Solr5中按团队统计计算列平均值的查询方法
按Team分组统计平均完成率(Solr5)
针对你的需求,Solr5可以通过函数查询结合Stats组件直接实现,无需预处理数据,具体方案如下:
核心查询逻辑
利用Solr内置函数实时计算每个文档的完成率,再通过stats.facet按Team字段分组统计平均值。完成率公式对应Solr函数表达式:div(mul(DrivingTime, 100), TotalLapTime)
具体查询参数
q=*:*&stats=true&stats.facet=Team&stats.field=div(mul(DrivingTime,100),TotalLapTime)
参数说明:
q=*:*:匹配集合中所有文档stats=true:启用Stats统计组件stats.facet=Team:指定按Team字段进行分组统计stats.field=div(mul(DrivingTime,100),TotalLapTime):定义实时计算完成率的函数字段,Stats组件会自动对每个分组内的该函数值求平均
查询结果解析
返回的JSON结果中,stats.facet.Team节点下会包含各Team的统计数据:
- 每个Team分组内的
stats_fields.div(mul(DrivingTime,100),TotalLapTime).avg即为该组的平均完成率 - 将平均值按需求保留小数位数并添加百分号,即可得到预期格式(比如Team A的平均完成率为37.5%,可按需四舍五入为37%)
备选方案:预处理字段(性能优化场景)
如果数据量极大,实时函数计算影响查询性能,可提前在索引阶段完成完成率计算:
- 修改
schema.xml,新增存储完成率的字段:<field name="CompletionRate" type="float" indexed="false" stored="true"/> - 索引数据时,提前计算每个文档的
CompletionRate = (DrivingTime * 100) / TotalLapTime并写入该字段 - 查询时使用简化的统计参数:
q=*:*&stats=true&stats.facet=Team&stats.field=CompletionRate
内容的提问来源于stack exchange,提问作者Pit Digger
相关产品推荐
相关产品推荐

