全部产品

统计子句-aggregate

更新时间:2020-08-19 20:38:11

子句说明

一个关键词查询后可能会找到数以万计的文档,用户不太可能浏览所有的文档来获取自己需要的信息,有些情况下用户感兴趣的可能是一些统计的信息。

语法说明

统计子句格式

  1. group_key:field, range:number1~number2, agg_fun:func1#func2, max_group:number2,
  2. agg_filter:filter_clause, max_group:number

参数介绍

参数 类型 必需 取值范围 默认值 描述
group_key:field field为属性字段 必选参数 目前只支持对 INT,LITERAL,INT_ARRAY,LITERAL_ARRAY 字段类型做统计(注意 INT_ARRAY,LITERAL_ARRAY 这2个字段类型做统计时,以该字段中相同值为单位进行统计) field为要进行统计的字段名,必须配置属性字段
agg_fun 必选参数 count(id)、sum(id)、max(id)、min(id)四种系统函数 func可以为count()、sum(id)、max(id)、min(id)四种系统函数,含义分别为:文档个数、对id字段求和、取id字段最大值、取id字段最小值;支持同时进行多个函数的统计,中间用英文井号(#)分隔;sum、max、min的内容支持基本的算术运算
range 非必须参数 表示number1~number2及大于number2的区间情况(注:不支持string类型的字段分布统计) 表示分段统计,可用于分布统计,只支持单个range参数。
agg_filter 非必须参数 表示仅统计满足特定条件的文档
agg_sampler_threshold int类型 非必须参数 ,抽样统计的阈值。表示该值之前的文档会依次统计,该值之后的文档会进行抽样统计;
agg_sampler_step int类型 非必须参数 抽样统计的步长,表示从agg_sampler_threshold后的文档将间隔agg_sampler_step个文档统计一次。对于sum和count类型的统计会把阈值后的抽样统计结果最后乘以步长进行估算,估算的结果再加上阈值前的统计结果就是最后的统计结果。
max_group int类型 非必须参数 1000 最大返回组数

注意事项

  • aggregate为非必选子句;
  • 在aggregate中出现的字段必须在定义应用结构的时候配置为属性字段
  • aggregate结果会在搜索节点facet节点中展示出来,具体值字段名为agg_fun的名字,如sum、count等
  • aggregate支持多个key的统计,多个统计中间用英文分号(;)分隔。
  • 该统计子句信息展示在facet 中,需设置config子句中的format 为fulljson 格式,才会返回并展示facet 对应内容。
  • 受引擎性能影响,aggregate统计子句仅能保证10w的召回量下的文档数统计准确,超过10w的文档数统计不保证准确。

示例

  1. 搜索包含“浙大”的文档,并按照group_id字段进行统计,统计维度包含对price字段进行求和及计算最大值;并对company_id进行统计个数:

    1. query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:sum(price)#max(price);group_key:company_id,agg_fun:count()

    结果展示

    1. {
    2.   status: "OK",
    3.   result: {
    4.     searchtime: 0.015634,
    5.     total: 5,
    6.     num: 1,
    7.     viewtotal: 5,
    8.     items: [ //具体搜索结果
    9.       { ... }
    10.     ],
    11.     facet: [
    12.       {
    13.         key: "group_id",
    14.         items: [
    15.           {
    16.             value: 43,
    17.             sum: 81,
    18.             max: 20,
    19.           },
    20.           {
    21.             value: 63,
    22.             sum: 91,
    23.             max: 50,
    24.           },
    25.         ],
    26.       },
    27.       {
    28.         key: "company_id",
    29.         items: [
    30.           {
    31.             value: 13,
    32.             count: 4,
    33.           },
    34.           {
    35.             value: 10,
    36.             count: 1,
    37.           },
    38.         ],
    39.       },
    40.     ],
    41.   },
    42.   errors: [ ],
    43.   tracer: "",
    44. },
  2. 搜索包含“浙大”的文档,并按照group_id字段进行统计,统计维度包含对price字段进行求和。其中10000以后的文档进行抽样,步长为5:

    1. query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:sum(price), agg_sampler_threshold:10000, agg_sampler_step:5
  3. 搜索包含“浙大”的文档,并按照group_id字段进行统计个数,统计维度为小于10、10~50、及大于50的文档数:

    1. query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:count(),range:10~50
  4. 搜索包含“浙大”的文档,并按照group_id字段进行统计hits及replies的和的最大值,仅统计create_timestamp大于1423456781的文档:

    1. query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:max(hits+replies),agg_filter:create_timestamp>1423456781