searchAgg 用于实现聚合,本页面主要介绍如何对指定 index 检索结果进行聚合统计。
聚合统计能指定字段进行分组聚合,并可添加过滤操作,最终得到相应的聚合统计结果,辅助了解数据分布等情况。
索引需要包含至少一个枚举类型(string、int64或bool类型)的标量索引字段。
请求参数是 SearchAggParam,SearchAggParam 实例包含的参数如下表所示。
参数名 | 类型 | 必选 | 备注 | 子参数 | 类型 | 备注 | 必选 |
|---|---|---|---|---|---|---|---|
agg | map | 是 | 聚合参数 | op | string | 目前仅支持count。使用count算子时,索引中必须至少存在一个string、int64或bool类型的标量索引字段。 | 是 |
field | string | 对指定字段名进行聚合。字段类型支持string,int64,bool且必须为标量索引字段。 | 否 | ||||
cond | map | 类似SQL里group by的having 子句。仅当field字段存在时,才生效。对于count算子,支持gt,表示仅返回大于阈值的结果项。 | 否 |
运行示例前,请完成以下准备:
- 在 Java 项目中引入 VikingDB SDK,并将示例放入可执行的
main方法后编译运行。- 将
<YOUR_HOST>、<YOUR_REGION>和<YOUR_SCHEME>替换为地域和访问域名中与实例一致的服务地址、地域和协议。- 将
<YOUR_AK>、<YOUR_SK>替换为火山引擎控制台“密钥管理”中创建的 Access Key ID 和 Secret Access Key;请勿把真实凭证提交到代码仓库。- 将 Collection、Index、Task 等资源占位符替换为控制台中对应资源的名称或接口返回的 ID。若示例包含 TOS 路径,请从 TOS 控制台确认桶名和对象路径,并使用
tos://<YOUR_BUCKET_NAME>/<YOUR_OBJECT_KEY>或文档要求的路径格式。
// 获取指定索引,程序初始化时调用即可,无需重复调用 IndexClient indexClient = new IndexClient("<YOUR_COLLECTION_NAME>", "<YOUR_INDEX_NAME>", "api-vikingdb.volces.com", "cn-beijing", "<YOUR_AK>", "<YOUR_SK>", "http");
示例1:对指定index下数据的数量统计
Map<String, Object> agg = new HashMap<>(); agg.put("op", "count"); SearchAggResult result = indexClient.searchAgg(new SearchAggParam() .setAgg(agg) .build()); System.out.println(result);
示例2:对指定索引下数据按条件筛选排除后,针对特定字段进行聚合统计。
Map<String, Object> agg = new HashMap<>(); agg.put("op", "count"); agg.put("field", "age"); Map<String, Object> filter = new HashMap<>(); filter.put("op", "range"); filter.put("field", "salary"); filter.put("gt", 3000); SearchAggResult result = indexClient.searchAgg(new SearchAggParam() .setAgg(agg) .setFilter(filter) .build()); System.out.println(result);
Java调用执行上面的任务,返回 List 。Data 实例包含的属性如下表所示。
属性 | 说明 |
|---|---|
aggOp | 算子类型 |
groupByField | 请求返回中的 fields 字段,即用哪个字段进行聚合的 |
aggResult | 聚合处理的结果值 |