aggs子句

子句说明

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

子句语法

{
  "aggs" : [
    {
      "group_key": "field",
      "agg_fun" : ["func1", "func2"],
      "agg_filter" : "filter_expression",
      "agg_range" : [number1, number2],
      "max_group" : number,
      "order_by":"count"
    } 
  ]
}
  • group_key:必选参数。field为要进行统计的字段名,必须配置属性字段,字段类型必须是整型或者string类型。

  • agg_fun:必选参数。func可以为count()、sum(id)、max(id)、min(id)、distinct_count(id)五种系统函数,含义分别为:文档个数、对ID字段求和、取ID字段最大值、取ID字段最小值、对ID进行打散统计;支持同时进行多个函数的统计;

  • agg_filter:可选参数,表示仅统计满足特定条件的文档,agg_filter为逻辑表达式,具体逻辑可以参考filter子句。

  • range:可选参数,表示分段统计,可用于分布统计,只支持单个range参数。表示统计number1~number2及大于number2的区间情况。不支持string类型的字段分布统计。

  • max_group:可选参数,最大返回组数,默认为1000。

  • order_by:可选参数,参数必须为count,对统计结果进行排序,不指定默认安装group_key字典序排序。

示例:

  • 简单统计示例

    {
      "aggs" : [
        {
          "group_key": "group_id",
          "agg_fun" : ["sum(price)"]
    		} 
      ]
    }
    
    返回结果示例(只展示统计结果):
    {
      result: {
        facet: [
          {
            key: "group_id",
            items: [
              {
                value: 43,
                sum: 81
              },
              {
                value: 63,
                sum: 91
              }
            ]
          }
        ]
      }
    },

  • 同时统计多项信息

    {
      "aggs" : [
        {
          "group_key": "company_id",
          "agg_fun" : ["sum(id)", "max(id)", "min(id)"]
    		} 
      ]
    }

  • 多groupkey统计

    {
      "aggs" : [
        {
          "group_key": "group_id",
          "agg_fun" : ["sum(price)"]
    		},
        {
          "group_key": "company_id",
          "agg_fun" : ["count()"]
    		} 
      ]
    }

  • 只统计满足条件的数据

    #只统计price大于100的数据
    {
      "aggs" : [
        {
          "group_key": "group_id",
          "agg_fun" : ["sum(price)"],
          "agg_filter" : "price > 100"
    		} 
      ]
    }

  • 类精确统计

    {
      "aggs" : [
        {
          "group_key": "company_id",
          "agg_fun" : ["distinct_count(brand)"]
    		}
      ]
    }
    注:如果统计函数为distinct_count,表示开启类精确统计(基于HLL算法),这种统计的精度损失通常在1%以内。

    注意事项

    • 在aggregate中出现的字段必须在定义应用结构的时候配置为属性字段;

    • aggregate结果会在搜索节点facet节点中展示出来,具体值字段名为agg_fun的名字,如sum、count等

    • 该统计子句信息展示在facet 中,需设置config子句中的format 为fulljson 格式,才会返回并展示facet 对应内容。

    • 受引擎性能影响,aggregate统计子句默认单分片保证10w的召回量下的文档数统计准确,超过10w的文档数统计不保证准确,可以通过调整集群配置来修改词参数。

    • 如果返回的分组数过多(max_group设置过大,比如万级别)可能会导致查询节点(qrs),消耗大量内存,出现oom的情况。