DynamicField上的Solr Aggregation / Facet

时间:2015-03-11 21:14:19

标签: solr datastax-enterprise datastax

表架构:

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

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我相信你应该在地图键上加上字段名称的前缀。这是以下链接中提到的要求/限制:

link1

link2

link3

因此,例如,您的'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

是否支持'统计'