• Elasticsearch--聚合


    聚合

    可用的聚合

    度量聚合

    1. max、min、sum、avg(用在数值型字段):下面是对字段year求最小值
    {
        "aggs":{
            "agg_name":{
                "min":{
                    "field":"year"
                }
            }
        }
    }
    
    1. 使用脚本
    {
        "aggs":{
            "agg_name":{
                "min":{
                    "field":"year",
                    "script":"_value - mod",
                    "params":{
                        "mod":100
                    }
                }
            }
        }
    }
    
    1. value_count聚合:统计字段有的所有标记,即该字段不为空的记录数量。有的分析字段在内部被分词,该聚合是统计原始未经分析的版本。
    {
        "aggs":{
            "agg_name":{
                "value_count":{
                    "field":"year"
                }
            }
        }
    }
    
    1. stat和extended_stat聚合:stat聚合统计数值型字段的统计信息包括:最大,最小,平均,总量,总和。extended_stat在stat统计信息的基础上,添加了平方和,方差和标准差。

    桶聚合

    桶聚合返回很多子集,并限制输入数据到一个特殊的叫做桶的子集中。

    1. terms聚合:为字段每个词条返回一个桶。还可以定义的属性包括:size(返回多少个桶),order(_term表示key,_count表示doc_count)。下面对copy字段统计
    {
        "aggs":{
            "agg_name":{
                "terms":{
                    "field":"copy",
    				"size":20,
                    "order":{"_term":"desc"}
                }
            }
        }
    }
    

    返回多个桶,下面是返回了一个桶

    {
        "agg_name":{
            "buckets":{
                "key":4,
                "doc_count":2
            }
        }
    }
    
    1. range聚合:使用定义的范围来创建桶。下面的例子检查给定时间区间的数据
    {
        "aggs":{
            "year":{
                "range":{
                    "field":"year",
    				"keyed":true,
                    "range":[
                        {"key":"A","to":1850 },
                        {"key":"B","from":1851, "to":1900 },
                        {"key":"C","from":1901, "to":1950 },
                        {"key":"D","from":2001 }
                    ]
                }
            }
        }
    }
    

    上边的keyed属性可以没有,加上后,es会为结果添加标签(名称),使结果会更清晰明了,如果不想使用es自动创建的标签,加入key属性,添加自己的标签。

    1. date_range聚合:类似range聚合,只不过使用的字段必须是日期类型。如果统计一个随时间变化的聚合时,可以使用now-3d这样的表达式,表示从现在起往前三天。
    2. nested聚合
    3. histogram聚合
    {
        "aggs":{
            "year":{
                "histogram":{
                    "field":"year",
                    "interval":100
                }
            }
        }
    }
    

    interval定义了每个桶的范围长度,上例的意思桶将以100年为周期进行创建。其他还有min_doc_count属性。
    6. 时区:Elasticsearch将日期存储成UTC时区,有三个属性可以设置:pre_zone, post_zone, time_zone。使用方式可以看Kibana请求
    7. geo_distance:
    8. geohash_grid

    聚合的嵌套

    执行顺序是先执行父嵌套,再执行子嵌套

    桶排序和嵌套聚合

    Elasticsearch还可以使用嵌套聚合里的值

  • 相关阅读:
    PHP实现简易的模板引擎
    三种实现PHP伪静态页面的方法
    转 php简单伪静态实例
    Function mysql_db_query() is deprecated 错误解决
    PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)--续
    PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
    mysql添加DATETIME类型字段导致Invalid default value错误的问题
    ASP程序中调用Now()总显示“上午”和“下午”,如何解决?
    解决程序开发中时间格式不对造成的问题
    “隐藏已知文件类型的扩展名”选项失败问题
  • 原文地址:https://www.cnblogs.com/51zone/p/9841007.html
Copyright © 2020-2023  润新知