自定义聚合


  1. 关闭标准聚合
  2. 数值平均分布区间
  3. max
  4. min
  5. sum
  6. avg
  7. stats
  8. exstats
  9. value_count
  10. percentiles
  11. percentile_ranks
  12. cardinality
  13. missing
  14. terms
  15. range
  16. date_range
  17. histogram
  18. date_histogram
  19. geo_distance
  20. cats

1. 关闭标准聚合

为了减少应用聚合的请求参数,标准聚合默认是开启的,对应的参数为"ignore_default_agg",该参数的值为"true"、"false","true"表示关闭标准聚合,"false" 反之。

2. 数值平均分布区间

数值平均分布区间针对数值字段,将数值字段统计划分为不同的区间,每个区间的文档数目基本相同。主要应用场景是商品搜索的价格区间,将符合条件的商品价格划分成指定数目的区间,每个区间的商品数目基本相同。在使用此功能前,商品的价格区间只能通过固定配置的方式,这样区间要么没有商品要么商品分布不均,没有较好的区分度,对用户的进一步筛选并不友好。 区间为左闭右开,实现的算法见:

聚合条件格式

ex_section_属性名=section(size:6,optimize:false)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 需要划分区间的字段名称,字段必须为数值类型(整数、浮点数均可)
size int 选填 划分的区间数目,默认值为6
optimize bool 选填 表示是否对区间进行平滑处理,可不填,默认为false;当前该属性不可用

如果都使用默认参数该聚合条件可简写为:ex_section_属性名

返回结果

  • 返回结果的"属性名_section"字段存放划分好的区间。
  • 区间为左闭右开。"from"字段表示区间的起始值,没有表示为0;"to"字段表示区间的终止值,没有表示最大;"doc_count"表示该区间文档数。

下面的例子表示对商品的销售价格进行均分区间统计:

http://192.168.65.222:18082/aggregations/A967550?q=酒&ex_section_salePrice=section(size:6,optimize:false)&

{
    "salePrice_section": [
        {
            "to": 10.0,
            "doc_count": 41
        },
        {
            "to": 40.0,
            "from": 10.0,
            "doc_count": 28
        },
        {
            "to": 60.0,
            "from": 40.0,
            "doc_count": 22
        },
        {
            "to": 90.0,
            "from": 60.0,
            "doc_count": 29
        },
        {
            "to": 140.0,
            "from": 90.0,
            "doc_count": 38
        },
        {
            "from": 140.0,
            "doc_count": 46
        }
    ]
}

3. max

max统计数值字段的最大值,返回单个值。max统计字段可以是文档中的数值字段,也可以是由脚本生成的动态字段。

查询条件格式

ex_agg_属性名=max(script:doc.price.value*2)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
script string 选填 动态脚本,如果使用脚本动态生成字段的话就使用该参数

返回结果

{
    "ex_agg_salePrice.max": {
        "value": 195500.0
    }
}
{
    "ex_agg_salePrice.max": {
        "value": 5555.0
    }
}

4. min

min统计数值字段的最小值,返回单个值。min统计字段可以是文档中的数值字段,也可以是由脚本生成的动态字段。

查询条件格式

ex_agg_属性名=min(script:doc.price.value*2)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
script string 选填 动态脚本,如果使用脚本动态生成字段的话就使用该参数

返回结果

{
    "ex_agg_salePrice.min": {
        "value": 0.01
    }
}
{
    "ex_agg_salePrice.min": {
        "value": 0.01
    }
}

5. sum

sum统计数值字段的和,返回单个值。sum统计字段可以是文档中的数值字段,也可以是由脚本生成的动态字段。

查询条件格式

ex_agg_属性名=sum(script:doc.price.value*2)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
script string 选填 动态脚本,如果使用脚本动态生成字段的话就使用该参数

返回结果

{
    "ex_agg_salePrice.sum": {
        "value": 1264913.6499999994
    }
}
{
    "ex_agg_salePrice.sum": {
        "value": 1264913.6499999994
    }
}

6. avg

avg统计数值字段的平均值,返回单个值。avg统计字段可以是文档中的数值字段,也可以是由脚本生成的动态字段。

查询条件格式

ex_agg_属性名=avg(script:doc.price.value*2)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
script string 选填 动态脚本,如果使用脚本动态生成字段的话就使用该参数

返回结果

{
    "ex_agg_salePrice.avg": {
        "value": 144.87614820753646
    }
}
{
    "ex_agg_salePrice.avg": {
        "value": 144.87614820753646
    }
}

7. stats

stats统计数值字段信息,返回多个指标,分别为:min, max, sum, count 和 avg。stats统计字段可以是文档中的数值字段,也可以是由脚本生成的动态字段。

查询条件格式

ex_agg_属性名=stats(script:doc.price.value*2)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
script string 选填 动态脚本,如果使用脚本动态生成字段的话就使用该参数

返回结果

{
    "ex_agg_salePrice.stats": {
        "count": 8731,
        "max": 195500.0,
        "sum": 1264913.6499999994,
        "avg": 144.8761482075363,
        "min": 0.01
    }
}
{
    "ex_agg_salePrice.stats": {
        "count": 8731,
        "max": 195500.0,
        "sum": 1264913.6499999994,
        "avg": 144.8761482075363,
        "min": 0.01
    }
}

8. exstats

exstats 统计数值字段的扩展信息,比stats增加了sum_of_squares, variance, std_deviation and std_deviation_bounds指标。统计字段可以是文档中的数值字段,也可以是由脚本生成的动态字段。

查询条件格式

ex_agg_属性名=exstats(script:doc.price.value*2)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
script string 选填 动态脚本,如果使用脚本动态生成字段的话就使用该参数

返回结果

{
    "ex_agg_salePrice.exstats": {
        "count": 8731,
        "min": 0.01,
        "sum_of_squares": 71954295591.20363,
        "max": 195500.0,
        "sum": 1264913.650000001,
        "std_deviation": 2867.098575301637,
        "std_deviation_bounds": {
            "upper": 5879.07329881081,
            "lower": -5589.321002395738
        },
        "variance": 8220254.240496677,
        "avg": 144.8761482075365
    }
}
{
    "ex_agg_salePrice.exstats": {
        "count": 8731,
        "min": 0.01,
        "sum_of_squares": 71954295591.20363,
        "max": 195500.0,
        "sum": 1264913.650000001,
        "std_deviation": 2867.098575301637,
        "std_deviation_bounds": {
            "upper": 5879.07329881081,
            "lower": -5589.321002395738
        },
        "variance": 8220254.240496677,
        "avg": 144.8761482075365
    }
}

9. value_count

value_count统计数值字段的值的个数,返回单个值。value_count统计字段可以是文档中的数值字段,也可以是由脚本生成的动态字段。

查询条件格式

ex_agg_属性名=value_count(script:doc.price.value*2)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
script string 选填 动态脚本,如果使用脚本动态生成字段的话就使用该参数

返回结果

{
    "ex_agg_salePrice.value_count": {
        "value": 8731
    }
}
{{
    "ex_agg_salePrice.value_count": {
        "value": 8731
    }
}

10. percentiles

percentiles统计数值字段的百分比分布值。percentiles统计字段可以是文档中的数值字段,也可以是由脚本生成的动态字段。对价格进行percentiles统计,就可以知道10%、30%、80%...的商品价格的范围。

查询条件格式

ex_agg_属性名=percentiles(script:doc.price.value*2,percents:10,20.5,60)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
script string 选填 动态脚本,如果使用脚本动态生成字段的话就使用该参数
percents string 选填 查询的百分比范围,默认值为:1,5,25,50,75,95,99

返回结果

{
    "ex_agg_salePrice.percentiles": {
        "values": {
            "5.0": 1.0,
            "25.0": 3.7956109381486094,
            "1.0": 0.7,
            "95.0": 281.91499999999996,
            "75.0": 36.98249482401657,
            "99.0": 1647.8333333333346,
            "50.0": 9.945782541322313
        }
    }
}
{
    "ex_agg_salePrice.percentiles": {
        "values": {
            "5.0": 1.0,
            "25.0": 3.7956109381486094,
            "1.0": 0.7,
            "95.0": 281.91499999999996,
            "75.0": 36.98249482401657,
            "99.0": 1647.8333333333346,
            "50.0": 9.945782541322313
        }
    }
}

11. percentile_ranks

percentile_ranks统计和percentiles统计相反,统计数值字段值的百分比分布。percentile_ranks统计字段可以是文档中的数值字段,也可以是由脚本生成的动态字段。对价格进行percentile_ranks统计,就可以知道价格5、20、40...的百分比。

查询条件格式

ex_agg_属性名=percentile_ranks(script:doc.price.value*2,values:10,20.5,60)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
script string 选填 动态脚本,如果使用脚本动态生成字段的话就使用该参数
values string 必填 查询的值,

返回结果

{
    "ex_agg_salePrice.percentile_ranks": {
        "values": {
            "60.5": 83.49704574137265,
            "30.0": 71.18680342046017,
            "1300.0": 98.73843222982032
        }
    }
}
{
    "ex_agg_salePrice.percentile_ranks": {
        "values": {
            "60.5": 83.49704574137265,
            "30.0": 71.18680342046017,
            "1300.0": 98.73843222982032
        }
    }
}

12. cardinality

cardinality统计字段的不同值的个数,类似于数据库的count(distinct a),返回单个值。统计字段可以是文档中的字段,也可以是由脚本生成的动态字段。

查询条件格式

ex_agg_属性名=cardinality(precision_threshold:100)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
precision_threshold int 选填 精度

返回结果

{
    "ex_agg_spuId.cardinality": {
        "value": 8765
    }
}

13. missing

missing统计文档中没有该字段或者字段值为null或者空集合的情况,返回单个值。

查询条件格式

ex_agg_属性名=missing()

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段

返回结果

{
    "ex_agg_productLine.missing": {
        "doc_count": 714
    }
}

14. terms

terms统计文档中字段的词条数目情况,返回的词条按照文档数目从高到低排列。我们可以通过terms统计商品中的品牌以及各个品牌下面的商品数目。

查询条件格式

ex_agg_属性名=terms(size:10;min_doc_count:10)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
size int 选填 返回的词条数目,默认值为10,0表示不限制数目,返回所有的term
min_doc_count int 选填 统计的最小文档数,默认值:1

返回结果

key表示词条名称,doc_count表示词条下的文档数


    "ex_agg_brand.terms": {
        "buckets": [
            {
                "key": "",
                "doc_count": 2323
            },
            {
                "key": "得力(deli)",
                "doc_count": 1383
            },
            {
                "key": "Deli/得力",
                "doc_count": 824
            },
            {
                "key": "米乐熊",
                "doc_count": 206
            },
            {
                "key": "齐心",
                "doc_count": 135
            },
            {
                "key": "得力(Deli)",
                "doc_count": 116
            },
            {
                "key": "贝亲",
                "doc_count": 106
            },
            {
                "key": "格力高",
                "doc_count": 100
            },
            {
                "key": "乐事",
                "doc_count": 90
            },
            {
                "key": "恒顺",
                "doc_count": 84
            }
        ],
        "sum_other_doc_count": 3364,
        "doc_count_error_upper_bound": 39
    }
}

15. range

range统计文档中数值字段的范围情况。我们可以通过range统计文档中数值字段值的分布范围。

查询条件格式

ex_agg_属性名=range(ranges:-200,200-400,400-1000,1000-;min_doc_count:10)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
ranges string 必填 要统计的范围,左闭右开
min_doc_count int 选填 统计的最小文档数,默认值:1

返回结果

from表示区间的开始值,to表示区间的结束值,doc_count表示该区间的文档数

{
    "ex_agg_salePrice.range": {
        "buckets": [
            {
                "from": 0.0,
                "from_as_string": "0.0",
                "to_as_string": "50.0",
                "doc_count": 6940,
                "to": 50.0,
                "key": "0.0-50.0"
            },
            {
                "from": 50.0,
                "from_as_string": "50.0",
                "to_as_string": "200.0",
                "doc_count": 1258,
                "to": 200.0,
                "key": "50.0-200.0"
            },
            {
                "from_as_string": "200.0",
                "from": 200.0,
                "key": "200.0-*",
                "doc_count": 533
            }
        ]
    }
}

16. date_range

date_range统计文档中日期字段的范围情况。我们可以通过date_range统计文档中日期字段值的分布范围。

查询条件格式

ex_agg_属性名=date_range(ranges:str:now-10M/M--str:now+10M/M,now-10M/M--,--now-10M/M;keyed:true;script:doc.price.value*2;min_doc_count:10)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
ranges string 必填 要统计的范围,左闭右开
min_doc_count int 选填 统计的最小文档数,默认值:1

返回结果

from表示区间的开始值,to表示区间的结束值,doc_count表示该区间的文档数

{
    "ex_agg_salePrice.date_range": {
        "buckets": [
            {
                    "to": 1.3437792E+12,
                    "to_as_string": "08-2012",
                    "doc_count": 7
                },
                {
                    "from": 1.3437792E+12,
                    "from_as_string": "08-2012",
                    "doc_count": 2
                }
        ]
    }
}

17. histogram

histogram统计文档中数值字段的范围情况,和range统计不同的是histogram只需要指定一个区间长度即可。

查询条件格式

ex_agg_属性名=histogram(interval:100;keyed:true;extended_bounds:num:45-num:666;min_doc_count:10)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
interval int 必填 区间长度
min_doc_count int 选填 统计的最小文档数,默认值:1

返回结果

key表示区间的开始值,doc_count表示该区间的文档数

{
    "ex_agg_salePrice.histogram": {
        "buckets": [
            {
                "key": 0,
                "doc_count": 8583
            },
            {
                "key": 1000,
                "doc_count": 84
            },
            {
                "key": 2000,
                "doc_count": 23
            },
            {
                "key": 3000,
                "doc_count": 14
            },
            {
                "key": 4000,
                "doc_count": 6
            },
            {
                "key": 5000,
                "doc_count": 6
            },
            {
                "key": 6000,
                "doc_count": 4
            },
            {
                "key": 10000,
                "doc_count": 1
            },
            {
                "key": 11000,
                "doc_count": 1
            },
            {
                "key": 13000,
                "doc_count": 1
            },
            {
                "key": 20000,
                "doc_count": 2
            },
            {
                "key": 24000,
                "doc_count": 2
            },
            {
                "key": 25000,
                "doc_count": 1
            },
            {
                "key": 88000,
                "doc_count": 1
            },
            {
                "key": 147000,
                "doc_count": 1
            },
            {
                "key": 195000,
                "doc_count": 1
            }
        ]
    }
}

18. date_histogram

date_histogram统计文档中时间字段的范围情况,和date_range统计不同的是date_histogram只需要指定一个区间长度即可。

查询条件格式

ex_agg_属性名=date_histogram(interval:1.5h;keyed:true;format:yyyy-MM-dd;min_doc_count:10)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
interval string 必填 区间长度,需要带上时间单位,y(年),M(月),w(星期),d(天),h(小时),m(分钟),s(秒)
min_doc_count int 选填 统计的最小文档数,默认值:1
format string 选填 输出的日期格式

返回结果

key表示区间的开始值,doc_count表示该区间的文档数

{
    "ex_agg_salePrice.date_histogram": {
        "buckets": [
                {
                    "key_as_string": "2013-02-02",
                    "key": 1328140800000,
                    "doc_count": 1
                },
                {
                    "key_as_string": "2013-03-02",
                    "key": 1330646400000,
                    "doc_count": 2
                },
                ...
            ]
    }
}

19. geo_distance

geo_distance统计文档中地理位置字段距离某个坐标的距离的范围情况。

查询条件格式

ex_agg_属性名=geo_distance(ranges:num:45-num:666,num:99-,-num:200;origin:52.3760, 4.894;unit:km;distance_type:sloppy_arc;min_doc_count:10)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
origin string 必填 坐标点位置,经纬度的格式
ranges string 必填 要统计的范围,左闭右开
unit string 选填 距离单位,默认值m,可选值,单位有km、m、cm、mm、mi、yd、ft等
min_doc_count int 选填 统计的最小文档数,默认值:1

返回结果

from表示区间的开始值,to表示区间的结束值,doc_count表示该区间的文档数

{
    "ex_agg_salePrice.geo_distance": {
        "buckets": [
            {
                    "key": "*-100.0",
                    "from": 0,
                    "to": 100.0,
                    "doc_count": 3
                },
                {
                    "key": "100.0-300.0",
                    "from": 100.0,
                    "to": 300.0,
                    "doc_count": 1
                },
                {
                    "key": "300.0-*",
                    "from": 300.0,
                    "doc_count": 7
                }
        ]
    }
}

20. cats

cats统计文档中的类目字段。比如我们可以通过cats实时统计出商品所有的类目结构树,可以获得类似于B2C商城首页的类目树结构。

查询条件格式

ex_agg_属性名=cats(depth:3)

查询参数

参数名 数据类型 可需 描述
属性名 string 必填 查询的字段
depth int 选填 要统计的类目深度,depth从0开始,即一级目录为0,可不填,默认为2,默认值在系统参数中配置

返回结果

统计商品的二级类目:

http://0.0.0.0:8009/aggregations/A967550?ignore_default_agg=true&ex_agg_cats=cats(depth:1)

{
    "ex_agg_cats.cats": [
        {
            "childs": [
                {
                    "key": "办公文仪",
                    "doc_count": 3065
                },
                {
                    "key": "家居生活",
                    "doc_count": 1163
                },
                {
                    "key": "休闲食品",
                    "doc_count": 1043
                },
                {
                    "key": "酒水饮料",
                    "doc_count": 690
                },
                {
                    "key": "主食调味",
                    "doc_count": 677
                },
                {
                    "key": "母婴用品",
                    "doc_count": 640
                },
                {
                    "key": "设备耗材",
                    "doc_count": 551
                },
                {
                    "key": "品牌馆",
                    "doc_count": 376
                },
                {
                    "key": "运动户外",
                    "doc_count": 29
                },
                {
                    "key": "玩具乐器",
                    "doc_count": 11
                },
                {
                    "key": "6月特惠活动商品",
                    "doc_count": 7
                },
                {
                    "key": "虚拟卡券",
                    "doc_count": 7
                }
            ],
            "key": "b2b",
            "doc_count": 7877
        },
        {
            "childs": [
                {
                    "key": "办公文仪",
                    "doc_count": 2942
                },
                {
                    "key": "家居生活",
                    "doc_count": 1091
                },
                {
                    "key": "休闲食品",
                    "doc_count": 959
                },
                {
                    "key": "酒水饮料",
                    "doc_count": 661
                },
                {
                    "key": "主食调味",
                    "doc_count": 644
                },
                {
                    "key": "设备耗材",
                    "doc_count": 538
                },
                {
                    "key": "母婴用品",
                    "doc_count": 478
                },
                {
                    "key": "运动户外",
                    "doc_count": 27
                },
                {
                    "key": "玩具乐器",
                    "doc_count": 9
                },
                {
                    "key": "虚拟卡券",
                    "doc_count": 7
                },
                {
                    "key": "6月特惠组合",
                    "doc_count": 1
                }
            ],
            "key": "b2c",
            "doc_count": 7354
        },
        {
            "childs": [
                {
                    "key": "美丽的东西",
                    "doc_count": 1
                }
            ],
            "key": "p2c",
            "doc_count": 1
        }
    ]
}

results matching ""

    No results matching ""