zoukankan      html  css  js  c++  java
  • 【ES】学习12-近似聚合

    在数据操作中有三个考虑指标:大数据、精确性和实时性。三者难以同时满足。

    精确 + 实时

      数据可以存入单台机器的内存之中,我们可以随心所欲,使用任何想用的算法。结果会 100% 精确,响应会相对快速。

    大数据 + 精确

      传统的 Hadoop。可以处理 PB 级的数据并且为我们提供精确的答案,但它可能需要几周的时间才能为我们提供这个答案。

    大数据 + 实时

      近似算法为我们提供准确但不精确的结果。

    Elasticsearch 目前支持两种近似算法( cardinality 和 percentiles )。 它们会提供准确但不是 100% 精确的结果。

    cardinality度量

    提供字段的unique值数量。对应sql

    SELECT COUNT(DISTINCT color)
    FROM cars

    dsl语句

    GET /cars/transactions/_search
    {
        "size" : 0,
        "aggs" : {
            "distinct_colors" : {
                "cardinality" : {
                  "field" : "color"
                }
            }
        }
    }

    精度可以通过precision_threshold调节

    GET /cars/transactions/_search
    {
        "size" : 0,
        "aggs" : {
            "distinct_colors" : {
                "cardinality" : {
                  "field" : "color",
                  "precision_threshold" : 100 
                }
            }
        }
    }

    示例会确保当字段唯一值在 100 以内时会得到非常准确的结果。尽管算法是无法保证这点的,但如果基数在阈值以下,几乎总是 100% 正确的。高于阈值的基数会开始节省内存而牺牲准确度,同时也会对度量结果带入误差。 

    precision_threshold 接受 0–40,000 之间的数字,更大的值还是会被当作 40,000 来处理。

    如果想在搜索时加速,可以在索引时提前对字段哈希。

    percentiles 百分位数度量(看得不太懂,具体是数值怎么算出来的没看懂)

     百分位数展现某以具体百分比下观察到的数值。对发现异常很有用。

    GET /website/logs/_search
    {
        "size" : 0,
        "aggs" : {
            "load_times" : {
                "percentiles" : {
                    "field" : "latency" 
                }
            },
            "avg_load_time" : {
                "avg" : {
                    "field" : "latency" 
                }
            }
        }
    }

    更复杂的例子

    GET /website/logs/_search
    {
        "size" : 0,
        "aggs" : {
            "zones" : {
                "terms" : {
                    "field" : "zone" 
                },
                "aggs" : {
                    "load_times" : {
                        "percentiles" : { 
                          "field" : "latency",
                          "percents" : [50, 95.0, 99.0] 
                        }
                    },
                    "load_avg" : {
                        "avg" : {
                            "field" : "latency"
                        }
                    }
                }
            }
        }
    }

    查看某个数值属于哪个百分比:percentile_ranks

    GET /website/logs/_search
    {
        "size" : 0,
        "aggs" : {
            "zones" : {
                "terms" : {
                    "field" : "zone"
                },
                "aggs" : {
                    "load_times" : {
                        "percentile_ranks" : {
                          "field" : "latency",
                          "values" : [210, 800] 
                        }
                    }
                }
            }
        }
    }

    significant_terms 统计在背景流中显著异常的指标。有个很厉害的例子,关于电影推荐的。

  • 相关阅读:
    原生JS中Ajax的使用方法
    back-to-top回到顶部
    atom插件
    git 命令操作
    常用font-family
    上传按钮美化
    mongodb
    GraphicsMagick命令
    enctype=“multipart/form-data”详解
    操作符
  • 原文地址:https://www.cnblogs.com/dplearning/p/7028118.html
Copyright © 2011-2022 走看看