`

Elasticsearch 聚合作用域(Scoping Aggregations)

阅读更多

原文链接:http://blog.csdn.net/dm_vincent/article/details/42695339

 

 

聚合作用域(Scoping Aggregations)

到现在给出的聚合例子中,你可能已经发现了在搜索请求中我们省略了query子句。整个请求只是一个简单的聚合。

聚合可以和搜索请求一起运行,但是你需要理解一个新概念:作用域(Scope)。默认情况下,聚合和查询使用相同的作用域。换句话说,聚合作于匹配了查询的文档集。

让我们看看之前的一个聚合例子:

GET /cars/transactions/_search?search_type=count
{
    "aggs" : {
        "colors" : {
            "terms" : {
              "field" : "color"
            }
        }
    }
}

你可以发现聚合是孤立存在的。实际上,在ES中"不指定查询"和"查询所有文档"是等价的。前述查询在内部会被转换如下:

GET /cars/transactions/_search?search_type=count
{
    "query" : {
        "match_all" : {}
    },
    "aggs" : {
        "colors" : {
            "terms" : {
              "field" : "color"
            }
        }
    }
}

聚合总是在查询的作用域下工作的,因此一个孤立的聚合实际上工作在match_all查询的作用域 - 即所有文档。

一旦了解了这一点,我们就可以开始对聚合进行定制了。前面的所有例子都计算了关于所有数据的统计信息:最热卖的车,所有车的平均价格,每个月的最大销售额等等。

有了作用域,我们可以问这种问题”Ford汽车有几种可选的颜色?“,通过向请求中添加一个查询来完成(使用match查询):

GET /cars/transactions/_search  
{
    "query" : {
        "match" : {
            "make" : "ford"
        }
    },
    "aggs" : {
        "colors" : {
            "terms" : {
              "field" : "color"
            }
        }
    }
}

通过省略search_type=count,我们可以得到搜索结果以及聚合结果如下:

{
...
   "hits": {
      "total": 2,
      "max_score": 1.6931472,
      "hits": [
         {
            "_source": {
               "price": 25000,
               "color": "blue",
               "make": "ford",
               "sold": "2014-02-12"
            }
         },
         {
            "_source": {
               "price": 30000,
               "color": "green",
               "make": "ford",
               "sold": "2014-05-18"
            }
         }
      ]
   },
   "aggregations": {
      "colors": {
         "buckets": [
            {
               "key": "blue",
               "doc_count": 1
            },
            {
               "key": "green",
               "doc_count": 1
            }
         ]
      }
   }
}

这看起来没什么,但是它是生成更加强大的高级仪表板的关键。你可以通过添加一个搜索栏将任何静态的仪表板转换成一个实时数据浏览工具。这让用户能够搜索词条然后看到所有实时图表(它们由聚合提供支持,使用查询的作用域)。用Hadoop来实现试试看!

全局桶(Global Bucket)

你经常需要你的聚合和查询拥有相同的作用域。但是有时你也需要搜索数据的一个子集,而在所有数据上进行聚合。

比如,你想要知道Ford车相较所有车的平均价格。我们可以使用一个通常的聚合(作用域和查询相同)来得到Ford车的平均价格。而所有车的平均价格则可以通过全局桶来得到。

全局桶会包含你的所有文档,无论查询作用域是什么; 它完全绕开了作用域。由于它是一个桶,你仍然可以在其中嵌入聚合:

GET /cars/transactions/_search?search_type=count
{
    "query" : {
        "match" : {
            "make" : "ford"
        }
    },
    "aggs" : {
        "single_avg_price": {
            "avg" : { "field" : "price" } 
        },
        "all": {
            "global" : {}, 
            "aggs" : {
                "avg_price": {
                    "avg" : { "field" : "price" } 
                }

            }
        }
    }
}

该聚合作用在查询作用域中(比如,所有匹配了ford的文档); 全局桶没有任何参数; 聚合在所有文档上操作,无论制造商是哪一个。

single_avg_price指标基于查询作用域(即所有ford车)完成计算。avg_price是一个嵌套在全局桶中的指标,意味着他会忽略作用与的概念,而针对所有文档完成计算。该聚合得到的平均值代表了所有车的平均价格。

如果你已经读到了本书的这个地方,你会认识到这一真言:在任何可以使用过滤器(Filter)的地方使用它。这一点对于聚合同样适用,在下一章中我们会介绍如果对聚合进行过滤,而不是仅仅对查询作用域作出限制。

分享到:
评论

相关推荐

    elasticsearch聚合值过滤

    在 Elasticsearch(ES)中,聚合(Aggregations)是一种强大的数据汇总工具,允许用户对索引中的数据进行分组和统计分析。而“elasticsearch聚合值过滤”是ES聚合功能的一个高级应用场景,它允许我们根据聚合计算出...

    elasticsearch聚合后分页

    方法如果传总页数了,es就不用查询总页数,直接通过开始位置到结束位置取数即可

    Elasticsearch聚合 之 Terms

    Elasticsearch聚合之Terms Elasticsearch中的Terms聚合是一种常用的聚合方式,用于对文档中的某个字段进行分组统计。Terms聚合可以对文档中的某个字段进行分组,并统计每个组中的文档数量。 在Elasticsearch中,...

    elasticsearch脚本实现先聚合后过滤

    在 Elasticsearch (ES) 中,聚合(Aggregations)是一种强大的功能,允许我们对索引中的数据进行统计分析,如求平均值、计数、分桶等。而在某些场景下,我们可能需要在聚合的基础上进一步过滤结果,即基于聚合的结果...

    elasticsearch聚合.yaml

    elasticsearch聚合

    Elasticsearch聚合探索:桶聚合与度量聚合的区分与应用

    Elasticsearch的聚合功能允许用户对数据进行汇总和分析,其中桶聚合和度量聚合是两种常用的聚合类型。本文将详细探讨这两种聚合的区别及其应用场景。 桶聚合和度量聚合在Elasticsearch中扮演着不同的角色,它们共同...

    ElasticSearch Java API 中文文档

    标签《ES Java API 中文文档》强调了文档的内容属性,它属于ElasticSearch的一个重要组成部分,即用Java语言进行数据交互和操作的应用程序接口部分。 从部分内容中可以提取出以下知识点: 1. **Transport Client**...

    ES 聚合查询结果转换成相应的List对象

    ES 聚合查询结果转换成相应的对象集合,ES 聚合查询结果转换成相应的对象集合

    ElasticSearch 过滤聚合结果

    ElasticSearch对数据进行聚合并对聚合结果值进行过滤查询

    elasticsearch 8.11.3 windows安装包

    Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 为所有类型的数据提供近乎实时的...

    数据聚合的艺术:如何在 Elasticsearch 中使用聚合?

    ### 数据聚合的艺术:深入解析 Elasticsearch 中的聚合技术 Elasticsearch 作为一个强大的搜索与分析引擎,在处理海量数据方面表现出色。其内置的聚合功能更是数据分析领域的重要工具之一。本篇文章将详细探讨 ...

    elasticsearch elasticsearch-6.2.2 elasticsearch-6.2.2.zip 下载

    根据提供的文件信息,我们可以推断出本篇文章将围绕Elasticsearch 6.2.2版本进行详细介绍,包括其下载方式、主要功能特性以及在实际应用中的常见用途。 ### Elasticsearch简介 Elasticsearch是一款基于Lucene的...

    ES客户端+谷歌浏览器插件+Multi-Elasticsearch-Head

    多弹性搜索头,对著名的 Elasticsearch Head 的改进 1.保存和存储几个Elasticsearch端点 2.索引选项卡中的更多列 3. 任何请求现在都可以像 /_cat/indices 一样处理 JSON 返回 4. 更简约的外观(更小的字体等...) ...

    ES查询客户端,elasticsearch可视化工具 elasticsearch查询客户端

    Elasticsearch(简称ES)是一款强大的开源搜索引擎,广泛应用于数据检索、分析和管理。作为分布式、RESTful风格的搜索和数据分析引擎,Elasticsearch能够提供实时、高可用性以及可扩展的搜索功能。在进行日常的数据...

    elasticsearch6 聚合查询普通分页demo

    聚合查询分页测试termsAgg.size(2147483647); //指定最大统计显示多少行步骤1:全量聚合,size设置为: 2147483647。 ES5.X/6.X版本设置为2147483647 ,它等于2^31-1,请看该地方代码

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战)

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...

    elasticsearch windows 7.17.16 解压安装包

    Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 为所有类型的数据提供近乎实时的...

    elasticsearch-7.17.6及对应版本IK分词

    Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 为所有类型的数据提供近乎实时的...

    7.17.1系列Elasticsearch的elasticsearch-analysis-ik分词器

    适用于7.17.1系列,例如Elasticsearch的7.17.12版本。 elasticsearch-analysis-ik 是一个常用的中文分词器,在 Elasticsearch 中广泛应用于中文文本的分析和搜索。下面是 elasticsearch-analysis-ik 分词器的几个...

    Elasticsearch 开发手册

    * 利用 Elasticsearch 的高性能和分布式部署特征,可以对海量的业务订单数据进行分析和处理,还能利用 Elasticsearch 的聚合函数和分析能力统计出各种各样的数据报表 Elasticsearch 全家桶介绍: * Kibana:Kibana...

Global site tag (gtag.js) - Google Analytics