如何在Solr Facet中添加带条件的统计字段(无法使用fq过滤器)
Solr Facet新增条件统计(无需fq)的实现方案
可行,你可以直接在Facet的统计函数里嵌入条件判断,不用依赖全局的fq过滤器。
修改后的查询示例:
{ "facet":{ "total_game_plays" : "count", "unique_game_players" : "unique(uuid)", "total_play_time":"sum(play_time)", "from_usa": "unique(case(country='US', uuid, null))" } }
逻辑说明:
- 用
case函数做字段级条件过滤:当country等于US时返回用户的uuid,否则返回null unique函数会自动忽略null值,最终统计的就是仅来自美国的唯一用户数
扩展场景:
- 如果需要统计符合条件的记录总数(而非唯一用户),可以替换成:
"from_usa_play_count": "sum(case(country='US', 1, 0))" - 如果
country是多值字段(一条记录可能关联多个国家),可以用exists函数判断是否包含US:"from_usa": "unique(case(exists(query({!term f=country}US)), uuid, null))"
注意:确保你的Solr版本在4.0及以上,case和exists函数是这个版本之后才支持的。
内容的提问来源于stack exchange,提问作者Pit Digger
相关产品推荐
相关产品推荐

