【问题标题】:Solr Aggregation / Facet on DynamicField动态字段上的 Solr 聚合/构面
【发布时间】:2015-05-13 21:12:31
【问题描述】:

表架构:

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

有什么想法吗?

谢谢!

【问题讨论】:

    标签: solr datastax-enterprise datastax


    【解决方案1】:

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

    link1

    link2

    link3

    因此,例如,您的“a1”元素应该被称为“attributes1”,而“a12322”应该被称为“attributes12322”。

    然后在你的 Solr 模式中,定义一个 dynamicField 如下:

    <dynamicField name="attributes*" ... />
    

    然后您可以通过直接引用它们来查询地图元素。例如

    q=attributes12322:1
    

    现在,对于您关于聚合的问题,由于除了计数之外您还需要总和,我认为您使用需要 stats 而不是 facet

    stats=true&stats.field=attributes12322
    

    您可以指定多个 stats.field 参数,例如:

    stats=true&stats.field=attributes12322&stats.field=attributes1&stats.field=attribute51
    

    然后,您可以从每个 stats_fields 响应项的“sum”属性和“count”属性中检索总和

    编辑:

    我没有立即注意到您专门要求通过 CQL 或 Java 查询 Solr。我不确定CQL Solr queries 是否支持“统计信息”

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 2021-07-23
      • 1970-01-01
      • 2021-05-29
      • 2010-10-17
      • 2017-07-03
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多