表架构:
CREATE TABLE attributes_v1 (
profile_id bigint,
attributes map<text, int>,
solr_query text,
PRIMARY KEY ((profile_id))
)
表格中的数据如下所示:
profile_id | attributes
------------+---------------------------------------------
2 | {'a101': 1, 'a11': 1, 'a12322': 1, 'a51': 3}
3 | {'a1': 1, 'a10': 1, 'a11': 3, 'a51': 1}
1 | {'a1': 1, 'a10': 1, 'a2322': 1, 'a5': 3}
我无法弄清楚如何完成以下操作(通过CQL或java使用solr)
所需的聚合/方面:
a1计数:2 a1总和:2
a101计数:1 a101总和:1
a11计数:2 a11总和:4
a12322计数:1 a12322总和:1
a2322计数:1 a2322总和:1
a10计数:2 a10总和:2
a51计数:2 a51总和:4
a5计数:1 a5总和:3
有什么想法吗?
谢谢!
答案 0 :(得分:2)
我相信你应该在地图键上加上字段名称的前缀。这是以下链接中提到的要求/限制:
因此,例如,您的'a1'元素应该被称为'attributes1',而'a12322'应该被称为'attributes12322'。
然后在Solr模式中,按如下方式定义dynamicField:
<dynamicField name="attributes*" ... />
然后,您可以直接参考地图元素来查询它们。 e.g。
q=attributes12322:1
现在,关于聚合的问题,因为除了计数之外你还需要总和,我认为你需要使用need stats
而不是facet
。
stats=true&stats.field=attributes12322
您可以指定多个stats.field参数,例如:
stats=true&stats.field=attributes12322&stats.field=attributes1&stats.field=attribute51
然后,您可以从'sum'属性中检索总和,并从每个stats_fields响应项的'count'属性中检索计数
编辑:
我没有立即注意到您特别要求通过CQL或Java查询Solr。我不确定CQL Solr queries
是否支持'统计'