DynamicField 上的 Solr 聚合/方面
Solr Aggregation / Facet on DynamicField
Table 架构:
CREATE TABLE attributes_v1 (
profile_id bigint,
attributes map<text, int>,
solr_query text,
PRIMARY KEY ((profile_id))
)
table 中的数据如下所示:
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
有什么想法吗?
谢谢!
我相信您应该在地图键前面加上字段本身的名称。这是以下链接中提到的 requirement/limitation:
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
是否支持 'stats'
Table 架构:
CREATE TABLE attributes_v1 (
profile_id bigint,
attributes map<text, int>,
solr_query text,
PRIMARY KEY ((profile_id))
)
table 中的数据如下所示:
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
有什么想法吗?
谢谢!
我相信您应该在地图键前面加上字段本身的名称。这是以下链接中提到的 requirement/limitation:
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
是否支持 'stats'