ES-组合与聚合

ES组合查询

1 must
满足两个match才会被命中

GET /mergeindex/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "liyong"
          }
        },
        {
          "match_phrase": {
            "desc": "liyong"
          }
        }
      ]
    }
  }
}

2 must 可以换成filter,这样可以不用计算score 这样性能更好。

GET /mergeindex/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "match": {
            "name": "liyong"
          }
        },
        {
          "match_phrase": {
            "desc": "liyong"
          }
        }
      ]
    }
  }
}

3 should 类似于SQL中的 or

GET /mergeindex/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "liyong"
          }
        },
        {
          "match_phrase": {
            "desc": "liyong"
          }
        }
      ]
    }
  }
}

bool 支持嵌套但是不推荐。
4 must 与 filter 组合使用
这个时候会限制性filter然后再执行must,也就是预处理,先过滤掉一部分数据。

GET /mergeindex/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "liyong"
          }
        },
        {
          "match_phrase": {
            "desc": "liyong"
          }
        }
      ],
      "filter": [
        {
          "range": {
            "salary": {
              "gte": 0,
              "lte": 190000
            }
          }
        }
      ]
    }
  }
}

5 filter 和 should 一起使用
有可能会有一个问题,就是should不工作,需要加上一个兜底条件minimum_should_match : 1 最好是加上。

GET /mergeindex/_search
{
  "query": {
    "bool": {
     #should 至少要匹配一个
     "minimum_should_match" : 1, 
      "should": [
        {
          "match": {
            "name": "liyong"
          }
        },
        {
          "match_phrase": {
            "desc": "liyong"
          }
        }
      ]
    }
  }
}

ES聚合

GET /demo/_search
{
  "size" : 0, #不返回hints 减少数据量
  "aggs": { #固定语法
    "age": { #自定义名字
      "terms": {
        "field": "age", #根据年龄进行聚合
        "size": 10
      }
    }
  }
}

在这里插入图片描述
需要注意点是如果是文本则不能直接聚合,需要使用keyworkd

GET /product/_search
{
  "size": 0, 
   "aggs": {
    "age": {
      "terms": {
        "field": "tags.keyword", # 这里不能填 tags 因为默认会被拆分,然后每个元素都是text类型
        "size": 10 #限制桶的数量 如果填1 就只返回一个聚合结果
      }
    }
  }
}

在这里插入图片描述
status 可以一下统计常见的数值

GET /demo/_search
{
  "size": 0, 
   "aggs": {
    "age_status": {
      "stats": {
        "field": "age"
      }
    }
  }
}

在这里插入图片描述
也可以分开来写

GET /demo/_search
{
  "size": 0,
  "aggs": {
    "max_age": {
      "max": {
        "field": "age"
      }
    },
    "min_age": {
      "min": {
        "field": "age"
      }
    },
    "sum_age": {
      "sum": {
        "field": "age"
      }
    },
    "avg_age": {
      "avg": {
        "field": "age"
      }
    },
    "count": {
      "value_count": {
        "field": "age"
      }
    }
  }
}

在这里插入图片描述

去重


GET /demo/_search
{
  "size": 0,
  "aggs": {
   "distinct_name" : {
     "cardinality": {
       "field": "age" #去除重复的年龄有几个种类
     }
   }
  }
}

在这里插入图片描述
聚合嵌套

GET demo/_search
{
  "size": 0,
  "aggs": {
    "age_bucket": {
      "terms": {
        "field": "name.keyword"
      },
      "aggs": { #这个案例演示aggs是可以嵌套的
        "age_bulk": {
          "avg": {
            "field": "age"
          }
        }
      }
    },
    "min_bucket": {
      "min_bucket": {
        "buckets_path": "age_bucket>age_bulk" #固定语法 直接筛选出了 年龄最小的
      }
    }
  }
}

在这里插入图片描述
先筛选再聚合

GET product/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 1000
      }
    }
  }, # 先筛选出数据 在进行聚合
  "aggs": {
    "type_bucket": {
      "terms": {
        "field": "type.keyword" #根据type进行分组
      }
    }
  }
}

排序

GET /product/_search?size=0
{
  "aggs": {
    "tags_aggs": {
      "terms": {
        "field": "tags.keyword",
        "size": 10,
        "order": {
          "_key": "asc" #根据_count来排序 通过数量来排序
        }
      }
    }
  }
}

嵌套排序

#不返回hits中的数据
GET /product/_search?size=0 
{
  "aggs": {
    "first_sort": {
      "terms": {
        "field": "tags.keyword",
        "order": {
          "_count": "desc"
        }
      },
      "aggs": {
        "second_sort": {
          "terms": {
            "field": "type.keyword",
            "order": {
              "_count": "desc"
            }
          }
        }
      }
    }
  }
}

自定义排序


GET /product/_search?size=0 #指定不返回hints
{
  "aggs": {
    "type_price": {
      "terms": {
        "field": "type.keyword",
        "order": {
          #过滤的名字 第二个过滤器有多个止值可以用.来指定
          #指定聚合那个字段排在前面
          "agg_stats>stats.min": "asc" 
        }
      },
      "aggs": {
        "agg_stats": {
          "filter": {
            "terms": {
              "tags.keyword": [
                "88vip",
                "tmall"
              ]
            }
          },
          "aggs": {
            "stats": {
              "stats": {
                "field": "price"
              }
            }
          }
        }
      }
    }
  }
} 
#先根据type分类然后 根据tags 筛选 再 根据最小值进行排序

直方图
首先来看这样一个例子

GET /product/_search?size=0
{
  "aggs": {
    "price_range": {
      "range": {
        "field": "salary",
        "ranges": [
          {
            "from": 0,
            "to": 1000
          },
          {
            "from": 1000,
            "to": 2000
          },
          {
            "from": 2000,
            "to": 3000
          },
          {
            "from": 3000,
            "to": 4000
          }
        ]
      }
    }
  }
}

在这里插入图片描述
这里相当于做一个统计,但是需要一个一个定义,类似于坐标轴x,可以有更简单的写法

GET /product/_search?size=0
{
  "aggs": {
    "price_range": {
     "histogram": {
       "field": "salary",
       "interval": 1000 #坐标间距
      
     }
    }
  }
}


GET /product/_search?size=0
{
  "aggs": {
    "price_range": {
     "histogram": {
       "field": "salary",
       "interval": 1000,
       "missing": 0, #如果为空值就为0
       "min_doc_count": 1 #小于1的不展示 依据doc_count属性
     }
    }
  }
}

在这里插入图片描述
时间直方图

GET /product/_search
{
  "aggs": {
    "price_range": {
      "date_histogram": {
        "field": "date",
        #看月度数据
        "calendar_interval": "month", #year day
        #看2023-01 - 06的数据
        "extended_bounds": {
          "min": "2023-01",
          "max": "2023-06"
        }
      }
    }
  }
}

水位

GET /product/_search
{
  "size" : 0,
  "aggs": {
    "salary_range": {
      "percentile_ranks": {
        "field": "salary",
        "values": [
          1000,
          2000,
          3000,
          4000
        ]
      }
    }
  }
}

它的意思是,有27%的数据薪水不超过1000, 有38%的薪水不超过2000,以此类推吧
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/252025.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鼠标点击展开详情

网页部分&#xff1a; HTML部分&#xff1a; <body><br><div id"nav"><div id"dang"></div><ul id"aaa"><li class"a1"><img src"img/U011.jpg" width"195" heig…

鸿蒙南向开发环境的搭建

在嵌入式开发中&#xff0c;很多开发者习惯于使用Windows进行代码的编辑&#xff0c;比如使用Windows的Visual StudioCode进行OpenHarmony代码的开发。但当前阶段&#xff0c;大部分的开发板源码还不支持在Windows环境下进行编译&#xff0c;如Hi3861、Hi3516系列开发板。因此&…

论文阅读:Learning sRGB-to-Raw-RGB De-rendering with Content-Aware Metadata

论文阅读&#xff1a;Learning sRGB-to-Raw-RGB De-rendering with Content-Aware Metadata Abstract 大多数的 Camera ISP 会将 RAW 图经过一系列的处理&#xff0c;变成 sRGB 图像&#xff0c;ISP 的处理中很多模块是非线性的操作&#xff0c;这些操作会破坏环境光照的线性…

MySQL 常用数据类型总结

面试&#xff1a; 为什么建表时,加not null default ‘’ / default 0 答:不想让表中出现null值. 为什么不想要的null的值 答:&#xff08;1&#xff09;不好比较,null是一种类型,比较时,只能用专门的is null 和 is not null来比较. 碰到运算符,一律返回null &#xff08…

了解如何在linux使用podman管理容器

本章主要介绍使用 podman 管理容器。 了解什么是容器&#xff0c;容器和镜像的关系 安装和配置podman 拉取和删除镜像 给镜像打标签 导出和导入镜像 创建和删除镜像 数据卷的使用 管理容器的命令 使用普通用户管理容器 使用普通用户管理容器 对于初学者来说&#xff0c;不太容…

MySQL笔记-第09章_子查询

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第09章_子查询1. 需求分析与问题解决1.1 实际问题1.2 子查询的基本使用1.3 子查询的分类 2. 单行子查询2.1 单行比较操作符2.2 代码示例2.3 …

【51单片机系列】直流电机使用

本文是关于直流电机使用的相关介绍。 文章目录 一、直流电机介绍二、ULN2003芯片介绍三、在proteus中仿真实现对电机的驱动 51单片机的应用中&#xff0c;电机控制方面的应用也很多。在学习直流电机(PWM)之前&#xff0c;先使用GPIO控制电机的正反转和停止。但不能直接使用GPIO…

Android---Kotlin 学习006

数字类型 和 java 一样&#xff0c;Kotlin 中所有数字类型都是有符号的&#xff0c;也就是说既可以表示正数&#xff0c;也可以表示负数。 安全转换函数 与 java 不一样&#xff0c;kotlin 提供了 toDoubleOrNull 和 toIntOrNull 这样的安全转换函数&#xff0c;如果数值不能…

FL Studio终身永久2024中文版下载安装详细操作图文步骤教程

FL Studio2024版是一款在国内非常受欢迎的多功能音频处理软件&#xff0c;我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 2024版还为用户们准备了超多的音乐乐器伴奏&#xff0c;我们可以直接一键调取自己需要的音调。 FL Studio 2024版不仅拥…

早上好,我的leetcode 【hash】(第二期)

写在前面&#xff1a;坚持才是最难的事情 C代码还是不方便写&#xff0c;改用python了&#xff0c;TAT 文章目录 1.两数之和49. 字母异位词分组128.最长连续序列 1.两数之和 你好&#xff0c;梦开始的地方~ https://leetcode.cn/problems/two-sum/description/?envTypestudy…

PMP项目管理 - 采购管理

系列文章目录 PMP项目管理 - 质量管理 PMP项目管理 - 采购管理 PMP项目管理 - 资源管理 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. PMP项目管理 -…

Next.js加载异步组件 骨架屏

Next.js 中有两种处理页面加载的方式&#xff0c;一种是 Loading UI 一种是 Streaming。接下来我将介绍这两种的区别&#xff0c;以及实际的业务场景。 当我们进入某个页面时&#xff0c;需要获取页面数据&#xff0c;可能是从数据库读取也有可能是 API 服务&#xff0c;总之这…

Linux---进程概念

目录 一、冯诺依曼体系结构 二、操作系统 1.关于下三层的理解 2.关于上三层的理解 三、进程 1.进程(也叫做任务)对应的标识符---pid 2.fork---用代码创建进程(系统接口) 1&#xff09;初步认识一下fork 2&#xff09;fork函数的返回值 3&#xff09;fork的原理 问题1…

残差网络中的BN (Batch Normalization 批标准化层)的作用是什么?

文章目录 什么是BN &#xff08;Batch Normalization 批标准化层&#xff09;一、BN层对输入信号进行以下操作:二、BN 层有什么作用&#xff1f; 什么是BN &#xff08;Batch Normalization 批标准化层&#xff09; BN层的全称是Batch Normalization层,中文可以翻译为批标准化…

[Big Bird]论文解读:Big Bird: Transformers for Longer Sequences

文章目录 1 介绍2 模型架构3 结果 论文&#xff1a;Big Bird: Transformers for Longer Sequences 作者&#xff1a;Manzil Zaheer, Guru Guruganesh, Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, Am…

多维时序 | MATLAB实现RIME-LSSVM【23年新算法】基于霜冰优化算法(RIME)优化最小二乘向量机(LSSVM)多变量时间序列预测

多维时序 | MATLAB实现RIME-LSSVM【23年新算法】基于霜冰优化算法(RIME)优化最小二乘向量机(LSSVM)多变量时间序列预测 目录 多维时序 | MATLAB实现RIME-LSSVM【23年新算法】基于霜冰优化算法(RIME)优化最小二乘向量机(LSSVM)多变量时间序列预测预测效果基本介绍模型描述程序设…

【最新版】在WSL上运行 Linux GUI (图形用户界面)应用(Gnome 文本编辑器、GIMP、Nautilus、VLC、X11 应用)

文章目录 一、 安装WSL1. 全新安装2. 现有 WSL 安装 二、运行 Linux GUI 应用1. 更新发行版中的包2. 安装 Gnome 文本编辑器启动 3. 安装 GIMP启动 4. 安装 Nautilus启动 5. 安装 VLC启动 6. 安装 X11 应用 适用于 Linux 的 Windows 子系统 (WSL) 现在支持在 Windows 上运行 Li…

深入比较Input、Change和Blur事件:Vue与React中的行为差异解析

目录 前言 1. Input事件&#xff1a; 行为差异&#xff1a; 2. Change事件&#xff1a; 行为差异&#xff1a; 3. Blur事件&#xff1a; 行为差异&#xff1a; 4. 在Vue中的表现&#xff1a; Input事件&#xff1a; Change事件&#xff1a; Blur事件&#xff1a; 5.…

Quartus 18.1软件及支持包安装教程

安装前最好关闭电脑的杀毒软件和防火墙 安装包可以到Quartus官网下载需要的版本&#xff0c;注意选择操作系统 Quartus官网&#xff1a;FPGA 设计软件 - 英特尔 Quartus Prime (intel.cn) 下载解压后以管理员的身份运行 QuartusSetup-18.1.0.625.exe文件&#xff0c;版本不同…

Vue中的数据变化监控与响应——深入理解Watchers

目录 ​编辑 前言 1. 基本用法&#xff1a; 2. 深度监听&#xff1a; 3. 立即执行&#xff1a; 4. 监听多个数据&#xff1a; 5. 清理监听器&#xff1a; 6. 监听路由变化&#xff1a; 总结&#xff1a; 我的其他博客 前言 在Vue.js中&#xff0c;watch是一种用于监听…