Elasticsearch聚合学习之三:范围限定

“terms”: {

“field”: “color”

}

}

}

}

最简单的查询范围

  1. 前面提出了一个问题:福特汽车一共分为几种颜色?这就是最简单的范围限定聚合(限定了汽车品牌),查询DSL如下:

GET /cars/transactions/_search

{

“size”:0,

“query”: { —范围限定的查询

“term”: { —查询类型是精确匹配

“make”: “ford” —查询条件是品牌为福特

}

},

“aggs”:{ —聚合

“popular_colors”:{ —聚合字段名

“terms”: { —桶类型

“field”: “color” —匹配字段是color

}

}

}

}

  1. 返回结果如下,只有福特汽车的聚合数据:

{

“took” : 7,

“timed_out” : false,

“_shards” : {

“total” : 5,

“successful” : 5,

“skipped” : 0,

“failed” : 0

},

“hits” : {

“total” : 2,

“max_score” : 0.0,

“hits” : [ ]

},

“aggregations” : { —聚合结果

“popular_colors” : { —聚合字段

“doc_count_error_upper_bound” : 0,

“sum_other_doc_count” : 0,

“buckets” : [ —这个数组的元素是所有的桶

{

“key” : “blue”, —color为blue的文档

“doc_count” : 1 —文档数为1

},

{

“key” : “green”, —color为blue的文档

“doc_count” : 1 —文档数为1

}

]

}

}

}

全局桶

如果想对比福特汽车的销售额和所有汽车的销售额,可以通过全局桶对所有文档做聚合,关键字是global,全局桶的聚合不受范围限定的影响:

GET /cars/transactions/_search

{

“size”: 0,

“query”: { —范围限定的查询

“term”: { —查询类型是精确匹配

“make”: “ford” —查询条件是品牌为福特

}

},

“aggs”: { —聚合

“ford_sales”: { —聚合字段名

“sum”: { —直接对范围内的所有文档执行metrics,类型是累加

“field”: “price” —选择price字段的值进行累加

}

},

“all”: { —聚合字段名

“global”: {}, —全局桶关键字,表示忽略前面term查询的范围限定

“aggs”: { —聚合

“all_sales”: { —聚合字段名

“sum”: { —直接对范围内的所有文档执行metrics,类型是累加

“field”: “price” —选择price字段的值进行累加

}

}

}

}

}

}

来看看结果:

“aggregations” : { —聚合结果

“all” : { —全局桶的聚合结果(term查询无效)

“doc_count” : 8, —文档总数

“all_sales” : { —聚合字段名

“value” : 212000.0 —总销售额

}

},

“ford_sales” : { —聚合字段名(term查询限定了范围,只有福特汽车的销售记录)

“value” : 55000.0 —福特汽车销售额

}

}

}

不止是query

前面的范围限定用到了query,其实适用于查询的过滤器也能应用在聚合操作中,下面是过滤+聚合的查询,和前面一样,也是统计总销售和和福特汽车的销售额:

GET /cars/transactions/_search

{

“size”: 0,

“query”: {

“bool”: { —布尔查询,里面可以将query和filter组合使用

“filter”: { —本例只用到了filter

“term”: { —精确匹配

“make”: “ford” —匹配福特品牌

}

}

}

},

“aggs”: { —聚合结果

“ford_sales”: { —聚合字段名

“sum”: { —metrics操作,累加

“field”: “price” —累加字段是price

}

},

“all”: { —聚合字段名

“global”: {}, —全局桶关键字,表示忽略范围限定

“aggs”: { —聚合

“all_sales”: { —聚合字段名

“sum”: { —metrics操作,累加

“field”: “price” —累加字段是price

}

}

}

}

}

}

查询结果如下,和query的一样:

“aggregations” : {

“all” : {

“doc_count” : 8,

“all_sales” : {

“value” : 212000.0

}

},

“ford_sales” : {

“value” : 55000.0

}

}

}

注意:虽然query和filter限定范围的结果是一样的,但是filter会忽略评分,并且有可能缓存结果数据,这些都是性能上的优势;

桶内filter

  1. 学习桶内filter之前,先看看官方的布尔查询DSL,如下所示,查询JSON对象的内部可以加入filter,对查询结果做过滤:

GET /_search

{

“query”: {

“bool”: {

“must”: [ —布尔查询

{ “match”: { “title”: “Search” }},

{ “match”: { “content”: “Elasticsearch” }}

],

“filter”: [ —对查询结果做过滤

{ “term”: { “status”: “published” }},

{ “range”: { “publish_date”: { “gte”: “2015-01-01” }}}

]

}

}

}

桶内filter和布尔查询中的filter类似,对进入桶中的数据可以加入filter,这样桶内的数据就是此filter过滤后的数据了;

2. 举个例子,统计蓝色的福特汽车销售额,首先限定品牌范围,这个可以直接用之前的限定方式,然后在桶内加入一个filter,只保留颜色为蓝色的文档:

GET /cars/transactions/_search

{

“size”: 0,

“query”: {

“bool”: { —布尔查询,里面可以将query和filter组合使用

“filter”: { —本例只用到了filter

“term”: { —精确匹配

“make”: “ford” —匹配福特品牌

Spring全套教学资料

Spring是Java程序员的《葵花宝典》,其中提供的各种大招,能简化我们的开发,大大提升开发效率!目前99%的公司使用了Spring,大家可以去各大招聘网站看一下,Spring算是必备技能,所以一定要掌握。

目录:

部分内容:

Spring源码

  • 第一部分 Spring 概述
  • 第二部分 核心思想
  • 第三部分 手写实现 IoC 和 AOP(自定义Spring框架)
  • 第四部分 Spring IOC 高级应用
    基础特性
    高级特性
  • 第五部分 Spring IOC源码深度剖析
    设计优雅
    设计模式
    注意:原则、方法和技巧
  • 第六部分 Spring AOP 应用
    声明事务控制
  • 第七部分 Spring AOP源码深度剖析
    必要的笔记、必要的图、通俗易懂的语言化解知识难点

脚手框架:SpringBoot技术

它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。

Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。

  • SpringBoot入门
  • 配置文件
  • 日志
  • Web开发
  • Docker
  • SpringBoot与数据访问
  • 启动配置原理
  • 自定义starter

微服务架构:Spring Cloud Alibaba

同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

  • 微服务架构介绍
  • Spring Cloud Alibaba介绍
  • 微服务环境搭建
  • 服务治理
  • 服务容错
  • 服务网关
  • 链路追踪
  • ZipKin集成及数据持久化
  • 消息驱动
  • 短信服务
  • Nacos Confifig—服务配置
  • Seata—分布式事务
  • Dubbo—rpc通信

Spring MVC

目录:

部分内容:

  • Spring Cloud Alibaba介绍
  • 微服务环境搭建
  • 服务治理
  • 服务容错
  • 服务网关
  • 链路追踪
  • ZipKin集成及数据持久化
  • 消息驱动
  • 短信服务
  • Nacos Confifig—服务配置
  • Seata—分布式事务
  • Dubbo—rpc通信

[外链图片转存中…(img-66rmLnN6-1719254965530)]

[外链图片转存中…(img-sKUbZJ0q-1719254965531)]

Spring MVC

目录:

[外链图片转存中…(img-ngmUz2x7-1719254965531)]

[外链图片转存中…(img-v0XtHQ58-1719254965532)]

[外链图片转存中…(img-yB9mvu2u-1719254965532)]

部分内容:

[外链图片转存中…(img-2pNNzOUS-1719254965532)]

[外链图片转存中…(img-IkkK8QDX-1719254965533)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值