一、设置fielddata

PUT /index/_mapping/type

{
     "properties":{
          "fieldName":{
             "type":"text",
             "fielddata":true
         }
     }

}

例如:

PUT /ecommerce/_mapping/product

{
   "properties": {
     "tags":{
       "type": "text",
       "fielddata": true
     }
   }

}

二、聚合分析

1、聚合分析基本语法:

需求1:计算每个tag下的商品数量

GET /ecommerce/product/_search          // GET /index/type/_search

{
   "size": 0,   // 返回数据hits内不显示命中的数据记录
   "aggs": {
     "all_tags": {  // 聚合器名称
       "AGG_TYPE": {      //AGG_TYPE聚合类型:terms,avg
         "field": "fieldName"//字段名称
       }
     }
   }

}

2、为聚合分析添加刷选条件

需求2:对名称中包含yagao的商品,计算每个tag下的商品数量

GET /ecommerce/product/_search

{
   "size": 0,
   "query": {
     "match": {
       "name": "yaogao"
     }
   },
   "aggs": {
     "all_tags": {
       "terms": {
         "field": "tags"
       }
     }
   }

}

3、嵌套聚合分析

需求3:先分组,再算每组的平均值,计算每个tag下的商品的平均价格

GET /ecommerce/product/_search

{
   "size": 0,
   "aggs": {
     "group_by_tags": {
       "terms": {
         "field": "tags"
       },
       "aggs": {
         "avg_price": {
           "avg": {
             "field": "price"
           }
         }
       }
     }
   }

}

4、聚合结果排序

需求4:计算每个tag下的商品的平均价格,并且按照平均价格降序排序

GET /ecommerce/product/_search

{
   "size": 0,
   "aggs": {
     "all_tags": {
       "terms": {
         "field": "tags",
         "order": {
           "avg_price": "asc"
         }
       },
       "aggs": {
         "avg_price": {
           "avg": {
             "field": "price"
           }
         }
       }
     }
   }

}

需求5:按照指定的价格范围区间进行分组,然后在每组内再按照tag进行分组,最后再计算每组的平均价格

GET /ecommerce/product/_search

{
   "size": 0,
   "aggs": {
     "group_by_price": {
       "range": {
         "field": "price",
         "ranges": [
           {
             "from": 0,
             "to": 20
           },{
             "from": 20,
             "to": 40
           },{
             "from": 40,
             "to": 50
           }
         ]
       },
       "aggs": {
         "all_tags": {
           "terms": {
             "field": "price"
           },
           "aggs": {
             "avg_price": {
               "avg": {
                 "field": "price"
               }
             }
           }
         }
       }
     }
   }

}

Elasticsearch学习笔记(三)聚合分析Agg的更多相关文章

  1. Elasticsearch学习之深入聚合分析三---案例实战

    1. 统计指定品牌下每个颜色的销量 任何的聚合,都必须在搜索出来的结果数据中进行,搜索结果,就是聚合分析操作的scope GET /tvs/sales/_search { , "query& ...

  2. Elasticsearch学习之深入聚合分析四---案例实战

    1. 需求:比如有一个网站,记录下了每次请求的访问的耗时,需要统计tp50,tp90,tp99 tp50:50%的请求的耗时最长在多长时间tp90:90%的请求的耗时最长在多长时间tp99:99%的请 ...

  3. Elasticsearch学习之深入聚合分析二---案例实战

    以一个家电卖场中的电视销售数据为背景,来对各种品牌,各种颜色的电视的销量和销售额,进行各种各样角度的分析,首先建立电视销售的索引,然后 添加几条销售记录 PUT /tvs { "mappin ...

  4. Elasticsearch学习之深入聚合分析一---基本概念

    首先明白两个核心概念:bucket和metric 1. bucket:一个数据分组 city name 北京 小李 北京 小王 上海 小张 上海 小丽 上海 小陈 基于city划分buckets,划分 ...

  5. 2018/2/13 ElasticSearch学习笔记三 自动映射以及创建自动映射模版,ElasticSearch聚合查询

    终于把这些命令全敲了一遍,话说ELK技术栈L和K我今天花了一下午全部搞定,学完后还都是花式玩那种...E却学了四天(当然主要是因为之前上班一直没时间学,还有安装服务时出现的各种error真是让我扎心了 ...

  6. Elasticsearch学习笔记三

    PS:前面两章已经介绍了ES的基础及REST API,本文主要介绍ES常用的插件安装及使用. Elasticsearch-Head Head是一个用于管理Elasticsearch的web前端插件,该 ...

  7. Elasticsearch学习之深入聚合分析五---案例实战

    1. fielddata核心原理 fielddata加载到内存的过程是lazy加载的,对一个analzyed field执行聚合时,才会加载,而且是field-level加载的,一个index的一个f ...

  8. elasticsearch学习笔记——相关插件和使用场景

    logstash-input-jdbc学习 ES(elasticsearch缩写)的一大优点就是开源,插件众多.所以扩展起来非常的方便,这也造成了它的生态系统越来越强大.这种开源分享的思想真是与天朝格 ...

  9. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  10. Elasticsearch学习笔记一

    Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...

随机推荐

  1. 基于weixin-java-mp 做微信JS签名 invalid signature签名错误 官方说明

    微信JS签名详情请见:http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang= ...

  2. linux源码安装服务器所需要的一些依赖库(待完善)

    apaeche :yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel cmake kernel-devel pcre-de ...

  3. 基于properties文件的Spring Boot多环境切换

    当我们使用properties文件作为Spring Boot的配置文件而不是yaml文件时,怎样实现多环境使用不同的配置信息呢?     在Spring Boot中,多环境配置的文件名需要满足appl ...

  4. Selenium Web 自动化

    1 Selenium Web 自动化 - Selenium(Java)环境搭建 2 Selenium Web 自动化 - 如何找到元素 3 Selenium Web 自动化 - Selenium常用A ...

  5. C++ 函数模板重载

    函数模板可以像普通函数那样重载. C++ 编译器会从不同的候选中匹配一个并进行调用. 即使不涉及到模板,这种匹配的规则也很复杂,现在还有加上模板一起匹配. 先来个小例子: #include <i ...

  6. C++笔试面试题整理

    朋友给出的一些常见的C++面试题,特整理如下,后期遇到新的再更新. 面试题 列举并解释C++中的四种运算符转化,说明它们的不同点: static_cast: 在功能上基本上与C风格的类型转换一样强大, ...

  7. org.hibernate.InvalidMappingException: Could not parse mapping document from无法创建sessionFactory

    把 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" 改为 "http://hibernate.sourc ...

  8. window/linux composer安装/卸载

    packagist库:https://packagist.org/ window  安装 参考地址:https://www.kancloud.cn/thinkphp/composer/35668 1. ...

  9. Laravel 深入理解路由和URL生成

    原文地址: Laravel 深入理解路由和URL生成 在模板中我们一般不会直接写死url,而是用url助手生成url,本文介绍一下url助手的使用以及遇到的一些比较头疼的问题. 首先,我们创建了一个路 ...

  10. python列表的切片操作允许索引超出范围

    其余的不说,列表切片操作允许索引超出范围: