aggregate子句

子句说明

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

语法说明

统计子句格式

group_key:field, range:number1~number2, agg_fun:func1#func2, max_group:number2, 
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)、distinct_count(id)五种系统函数

func可以为count()、sum(id)、max(id)、min(id)、distinct_count(id)五种系统函数,含义分别为:统计文档个数、对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的统计,多个统计中间用英文分号(;)分隔。参考格式:group_key:field1,agg_fun:func1;group_key:field2,agg_fun:func2

  • 统计子句信息需要将config子句中的format 设置为fulljson,才会在返回结果中的facet节点中展示

  • distinct_count功能,仅在独享-集群支持,同时需要在kvpairs子句中加入enable_accurate_statistics:true参数,使用distinct_count功能,查询将不再召回具体的结果数据,只有facet中的统计数据

  • 独享集群中,支持count、max、min和sum的精确统计,需要在kvpairs子句中加入enable_accurate_statistics:true参数

  • 受引擎性能影响,aggregate统计子句仅能保证10w的召回量下的文档数统计准确,超过10w的文档数统计不保证准确。(独享-集群,可通过在kvpairs子句中加入enable_accurate_statistics:true参数,提高统计的精确度)

示例

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

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

    结果展示

    {
      status: "OK",
      result: {
        searchtime: 0.015634,
        total: 5,
        num: 1,
        viewtotal: 5,
        items: [        //具体搜索结果
          { ... }
        ],
        facet: [
          {
            key: "group_id",
            items: [
              {
                value: 43,
                sum: 81,
                max: 20,
              },
              {
                value: 63,
                sum: 91,
                max: 50,
              },
            ],
          },
          {
            key: "company_id",
            items: [
              {
                value: 13,
                count: 4,
              },
              {
                value: 10,
                count: 1,
              },
            ],
          },
        ],
      },
      errors: [ ],
      tracer: "",
    },
  2. 搜索包含“浙大”的文档,并按照group_id字段进行统计,统计维度包含对price字段进行求和。其中10000以后的文档进行抽样,步长为5:

    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的文档数:

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

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