咨询:基于Solr实现多字段分组统计报表是否可行,需用MongoDB吗?
用Solr实现多字段分组统计:完全不需要切换到MongoDB!
绝对可以用Solr实现你要的这两个SQL统计需求,完全没必要换MongoDB。我来给你对应拆解具体的实现方式:
1. 对应 select field1,field2,count(*) from TABLE1 group by field1,field2
Solr的**Grouping(字段折叠)**功能支持多字段分组,直接指定多个group.field参数就能实现按field1+field2的组合分组,同时返回每组的文档数量。
示例请求参数:
q=*:* group=true group.field=field1 group.field=field2 group.ngroups=true # 开启后会返回每个分组的文档计数 rows=0 # 不需要返回具体文档,只看统计结果
返回结果里的grouped节点会包含每个field1+field2组合的分组,每个分组的matches值就是该组合的文档总数(对应SQL里的count(*))。
2. 对应 select field1,max(field2),min(field2),count(field1),max(field3),sum(field4) from TABLE1 group by field1
这个需求需要结合Grouping和Stats组件,让Solr按field1分组后,对每个分组计算指定的聚合统计值。
示例请求参数:
q=*:* group=true group.field=field1 group.stats=true # 开启分组内的统计功能 stats.field=field2 # 指定要统计的字段 stats.field=field3 stats.field=field4 stats.func=count(field1) # 自定义统计函数:count(field1) stats.func=max(field2) stats.func=min(field2) stats.func=max(field3) stats.func=sum(field4)
返回结果的grouped.field1.groups里,每个分组会包含对应的stats子节点,里面就是你需要的max、min、count、sum等统计值。
为什么之前只能单字段分组?
大概率是你没注意到Solr允许同时指定多个group.field参数,或者没结合group.stats=true来实现分组内的多维度聚合。只要合理组合Grouping、Stats和Pivot(如果需要交叉统计的话),Solr完全能覆盖这类报表统计场景。
内容的提问来源于stack exchange,提问作者bonecrusher
相关产品推荐
相关产品推荐

