Solr Facet查询:如何按公司维度统计唯一播放记录数?
问题解答
你的需求完全可以实现,但当前的查询语句存在问题——你定义的unique_internal_plays和unique_external_plays只是普通的Query Facet,只会返回匹配company:100或-company:100的文档总数,并非你需要的唯一播放记录数。
修正后的查询语句
只需在这两个Query Facet中加入unique(uuid)的聚合逻辑即可,具体写法如下:
{ "facet": { "unique_viewers": "unique(uuid)", "internal_plays": { "type": "query", "q": "company:100" }, "external_plays": { "type": "query", "q": "-company:100" }, "unique_internal_plays": { "type": "query", "q": "company:100", "func": "unique(uuid)" }, "unique_external_plays": { "type": "query", "q": "-company:100", "func": "unique(uuid)" } } }
说明
- 通过在Query Facet中使用
func字段指定unique(uuid),可以直接计算出该查询范围内(company:100或非company:100)的唯一uuid数量,也就是你要的唯一播放记录数。 - 如果需要更结构化的返回结果,也可以采用嵌套子Facet的写法:
{ "facet": { "unique_viewers": "unique(uuid)", "internal_plays": { "type": "query", "q": "company:100" }, "external_plays": { "type": "query", "q": "-company:100" }, "unique_internal_plays": { "type": "query", "q": "company:100", "facet": { "count": "unique(uuid)" } }, "unique_external_plays": { "type": "query", "q": "-company:100", "facet": { "count": "unique(uuid)" } } } }
两种写法都能满足你的统计需求,可根据返回结果的格式偏好选择。
内容的提问来源于stack exchange,提问作者Pit Digger
相关产品推荐
相关产品推荐

