0
点赞
收藏
分享

微信扫一扫

【es】聚合查询

奋斗De奶爸 2022-04-19 阅读 75

聚合查询

三种聚合分类:Bucket、Metrics、Pipeline

分桶聚合Bucket agregations

把具有相同属性的放到一起,类似SQL的group by;
例子:每个手机品牌看作一个桶。
在这里插入图片描述
品牌下的系列在分成一个桶,就是agregations嵌套查询
在这里插入图片描述

指标聚合Metrics agregations

一系列的指标
在这里插入图片描述
例子:按班级分桶,在按学科查询指标
在这里插入图片描述

管道聚合Pipeline agregations

概念:对聚合的结果二次聚合()
分类:父级和兄弟级(嵌套关系还是同级关系)
语法:buckets_path
例子1:按商品分类进行聚合,在计算平均价格。在这个基础之上在次进行计算最低价格;
在这里插入图片描述

测试数据

mysql数据(供参考,没有实际用处)

在这里插入图片描述

/*
Navicat Premium Data Transfer

Source Server : MyOwn
Source Server Type : MySQL
Source Server Version : 50731
Source Host : 39.96.23.94:3306
Source Schema : msb_db

Target Server Type : MySQL
Target Server Version : 50731
File Encoding : 65001

Date: 29/07/2021 15:14:52
*/


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for product
-- ----------------------------
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`desc` varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`price` decimal(10,0) DEFAULT NULL,
`lv` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`type` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`createtime` datetime DEFAULT NULL,
`tags` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ----------------------------
-- Records of product
-- ----------------------------
BEGIN;
INSERT INTO `product` VALUES (1, '小米手机', '手机中的战斗机', 3999, '旗舰机', '手机', '2020-10-01 08:00:00', '\"性价比\",\"发烧\",\"不卡顿\"');
INSERT INTO `product` VALUES (2, '小米NFC手机', '支持全功能NFC,手机中的滑翔机', 4999, '旗舰机', '手机', '2020-05-21 08:00:00', '\"性价比\",\"发烧\",\"公交卡\"');
INSERT INTO `product` VALUES (3, 'NFC手机', '手机中的轰炸机', 2999, '高端机', '手机', '2020-06-20 00:00:00', '\"性价比\", \"快充\",\"门禁卡\"');
INSERT INTO `product` VALUES (4, '小米耳机', '耳机中的黄焖鸡', 999, '百元机', '耳机', '2020-06-23 00:00:00', '\"降噪\",\"防水\",\"蓝牙\"');
INSERT INTO `product` VALUES (5, '红米耳机', '耳机中的肯德基', 399, '百元机', '耳机', '2020-07-20 00:00:00', '\"防火\",\"低音炮\",\"听声辨位\"');
INSERT INTO `product` VALUES (6, '小米手机10', '充电贼快掉电更快,超级无敌望远镜,高刷电竞屏', 5999, '旗舰机', '手机', '2020-07-27 00:00:00', '\"120HZ刷新率\",\"120W快充\",\"120倍变焦\"');
INSERT INTO `product` VALUES (7, '挨炮 SE2', '除了CPU,一无是处', 3299, '旗舰机', '手机', '2020-07-21 00:00:00', '\"割韭菜\",\"割韭菜\",\"割新韭菜\"');
INSERT INTO `product` VALUES (8, 'XS Max', '听说要出新款12手机了,终于可以换掉手中的4S了', 4399, '旗舰机', '手机', '2020-08-19 00:00:00', '\"5V1A\",\"4G全网通\",\"大\"');
INSERT INTO `product` VALUES (9, '小米电视', '70寸性价比只选,不要一万八,要不要八千八,只要两千九百九十八', 2998, '高端机', '电视', '2020-08-16 00:00:00', '\"巨馍\",\"家庭影院\",\"游戏\"');
INSERT INTO `product` VALUES (10, '红米电视', '我比上边那个更划算,我也2998,我也70寸,但是我更好看', 2999, '高端机', '电视', '2020-08-28 00:00:00', '\"大片\",\"蓝光8K\",\"超薄\"');
INSERT INTO `product` VALUES (11, '红米电视', '我比上边那个更划算,我也2998,我也70寸,但是我更好看', 2999, '高端机', '电视', '2020-08-28 00:00:00', '\"大片\",\"蓝光8K\",\"超薄\"');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;


es数据

在这里插入图片描述

# 删除所有
DELETE product
## 创建索引,设置mappings
PUT product
{
  "mappings" : {
      "properties" : {
        "createtime" : {
          "type" : "date"
        },
        "date" : {
          "type" : "date"
        },
        "desc" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          },
          "analyzer":"ik_max_word"
        },
        "lv" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "name" : {
          "type" : "text",
          "analyzer":"ik_max_word",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "price" : {
          "type" : "long"
        },
        "tags" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "type" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
}
PUT /product/_doc/1
{
    "name" : "小米手机",
    "desc" :  "手机中的战斗机",
    "price" :  3999,
    "lv":"旗舰机",
    "type":"手机",
    "createtime":"2020-10-01T08:00:00Z",
    "tags": [ "性价比", "发烧", "不卡顿" ]
}
PUT /product/_doc/2
{
    "name" : "小米NFC手机",
    "desc" :  "支持全功能NFC,手机中的滑翔机",
    "price" :  4999,
        "lv":"旗舰机",
    "type":"手机",
    "createtime":"2020-05-21T08:00:00Z",
    "tags": [ "性价比", "发烧", "公交卡" ]
}
PUT /product/_doc/3
{
    "name" : "NFC手机",
    "desc" :  "手机中的轰炸机",
    "price" :  2999,
        "lv":"高端机",
    "type":"手机",
    "createtime":"2020-06-20",
    "tags": [ "性价比", "快充", "门禁卡" ]
}
PUT /product/_doc/4
{
    "name" : "小米耳机",
    "desc" :  "耳机中的黄焖鸡",
    "price" :  999,
        "lv":"百元机",
    "type":"耳机",
    "createtime":"2020-06-23",
    "tags": [ "降噪", "防水", "蓝牙" ]
}
PUT /product/_doc/5
{
    "name" : "红米耳机",
    "desc" :  "耳机中的肯德基",
    "price" :  399,
    "type":"耳机",
        "lv":"百元机",
    "createtime":"2020-07-20",
    "tags": [ "防火", "低音炮", "听声辨位" ]
}
PUT /product/_doc/6
{
    "name" : "小米手机10",
    "desc" :  "充电贼快掉电更快,超级无敌望远镜,高刷电竞屏",
    "price" :  "",
        "lv":"旗舰机",
    "type":"手机",
    "createtime":"2020-07-27",
    "tags": [ "120HZ刷新率", "120W快充", "120倍变焦" ]
}
PUT /product/_doc/7
{
    "name" : "挨炮 SE2",
    "desc" :  "除了CPU,一无是处",
    "price" :  "3299",
        "lv":"旗舰机",
    "type":"手机",
    "createtime":"2020-07-21",
    "tags": [ "割韭菜", "割韭菜", "割新韭菜" ]
}
PUT /product/_doc/8
{
    "name" : "XS Max",
    "desc" :  "听说要出新款12手机了,终于可以换掉手中的4S了",
    "price" :  4399,
        "lv":"旗舰机",
    "type":"手机",
    "createtime":"2020-08-19",
    "tags": [ "5V1A", "4G全网通", "大" ]
}
PUT /product/_doc/9
{
    "name" : "小米电视",
    "desc" :  "70寸性价比只选,不要一万八,要不要八千八,只要两千九百九十八",
    "price" :  2998,
        "lv":"高端机",
    "type":"耳机",
    "createtime":"2020-08-16",
    "tags": [ "巨馍", "家庭影院", "游戏" ]
}
PUT /product/_doc/10
{
    "name" : "红米电视",
    "desc" :  "我比上边那个更划算,我也2998,我也70寸,但是我更好看",
    "price" :  2999,
    "type":"电视",
        "lv":"高端机",
    "createtime":"2020-08-28",
    "tags": [ "大片", "蓝光8K", "超薄" ]
}
PUT /product/_doc/11
{
  "name": "红米电视",
  "desc": "我比上边那个更划算,我也2998,我也70寸,但是我更好看",
  "price": 2998,
  "type": "电视",
  "lv": "高端机",
  "createtime": "2020-08-28",
  "tags": [
    "大片",
    "蓝光8K",
    "超薄"
  ]
}

语法

基本语法

{
  "aggs": {// 当前是聚合查询,可以包含多个
    "<aggs_name>": {// 给当前聚合起个名字
      "<aggs_type>": {// 聚合的类型:嵌套、桶、指标
        "field": "<field_name>",// 聚合的字段名称
        "size": 10// 返回前10个(可选)
      }
    }
  },
  "size": 0// his列表数据返回0条
}

桶聚合:统计不同标签的商品

举报

相关推荐

0 条评论