Elasticsearch使用系列-基本查询和聚合查询+sql插件
Elasticsearch使用系列-ES增删查改基本操作+ik分词
Elasticsearch使用系列-基本查询和聚合查询+sql插件
Elasticsearch使用系列-.NET6对接Elasticsearch
一、基本查询
1.And查询must
GET user2/_search
{
"query": {
"bool":{
"must": [
{
"match": {
"name": "张三"
}
},
{
"match": {
"hobby": "钓鱼"
}
} ]
}
},
"_source": ["name","age","hobby"],
"sort": [
{ "age": {"order": "desc"}},
{ "name2": {"order": "asc"}}
],
"from": 0,
"size": 20
}
- bool :And查询属于bool查询,must里面带And的查询条件。
- _source:要查询的字段
- sort:对查询结果排序
- from:分页查询,跳过多少条
- size:分页查询,一页查多少条
2.or查询should
GET user2/_search
{
"query": {
"bool":{
"should": [
{
"match": {
"name": "张三"
}
},
{
"match": {
"hobby": "钓鱼"
}
} ]
}
}
}
- bool:or查询属于bool查询
- should:里面放or的查询条件
3.排除查询 must_not
#查询名字不等于张三
GET user2/_search
{
"query": {
"bool":{
"must_not": [
{
"match": {
"name": "张三"
}
} ]
}
}
}
4.过滤查询filter
#查询名字等于张三,年龄大于等于10小于等于20
GET user2/_search
{
"query": {
"bool":{
"must": [
{
"match": {
"name": "张三"
}
} ],
"filter": [
{"range": {
"age": {
"gte": 10,
"lte": 20
}
}}
]
} }
}
- filter:过滤条件,先过滤数据再查询结果
- range:范围查询,和term,match是同类的查询。
- gte:大于等于
- gt:大于
- lte:小于等于
- lt:小于
5.同字段多值查询
GET user2/_search
{
"query": {
"terms": {
"name2": ["张三","李四"]
}
}
}
#text类型的多值查询,空格隔开
GET user2/_search
{
"query": {
"match": {
"name": "张三 李四"
}
}
}
6.高亮查询highlight
高亮查询,就是平时搜索东西时,搜索结果会把你的关键词匹配到的显示颜色,像下图一样。
高亮展示的数据,本身就是文档中的一个field,单独将field以highlight的形式返回给你。
ES提供了一个highlight属性,和query同级别的。
- pre_tag:指定前缀标签,如
<font color="red">
- post_tags:指定后缀标签,如
</font>
- fields:指定那个字段为高亮字段
查出来后,显示hobby字段的地方,就直接用高亮的hobby展示就行了。
二、聚合查询
bucket:分组后统计,类似于Mysql中的group by
metric:对分组统计的结果,计算最大值,最小值,平均值等,类似于Mysql中的max(),min(),avg()函数的值。
1.准备数据
创建索引
PUT employee
{
"mappings": {
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "keyword"
},
"job": {
"type": "keyword"
},
"age": {
"type": "integer"
},
"gender": {
"type": "keyword"
}
}
}
}
批量插入数据
PUT employee/_bulk
{"index": {"_id": 1}}
{"id": 1, "name": "Bob", "job": "java", "age": 21, "sal": 8000, "gender": "male"}
{"index": {"_id": 2}}
{"id": 2, "name": "Rod", "job": "html", "age": 31, "sal": 18000, "gender": "female"}
{"index": {"_id": 3}}
{"id": 3, "name": "Gaving", "job": "java", "age": 24, "sal": 12000, "gender": "male"}
{"index": {"_id": 4}}
{"id": 4, "name": "King", "job": "dba", "age": 26, "sal": 15000, "gender": "female"}
{"index": {"_id": 5}}
{"id": 5, "name": "Jonhson", "job": "dba", "age": 29, "sal": 16000, "gender": "male"}
{"index": {"_id": 6}}
{"id": 6, "name": "Douge", "job": "java", "age": 41, "sal": 20000, "gender": "female"}
{"index": {"_id": 7}}
{"id": 7, "name": "cutting", "job": "dba", "age": 27, "sal": 7000, "gender": "male"}
{"index": {"_id": 8}}
{"id": 8, "name": "Bona", "job": "html", "age": 22, "sal": 14000, "gender": "female"}
{"index": {"_id": 9}}
{"id": 9, "name": "Shyon", "job": "dba", "age": 20, "sal": 19000, "gender": "female"}
{"index": {"_id": 10}}
{"id": 10, "name": "James", "job": "html", "age": 18, "sal": 22000, "gender": "male"}
{"index": {"_id": 11}}
{"id": 11, "name": "Golsling", "job": "java", "age": 32, "sal": 23000, "gender": "female"}
{"index": {"_id": 12}}
{"id": 12, "name": "Lily", "job": "java", "age": 24, "sal": 2000, "gender": "male"}
{"index": {"_id": 13}}
{"id": 13, "name": "Jack", "job": "html", "age": 23, "sal": 3000, "gender": "female"}
{"index": {"_id": 14}}
{"id": 14, "name": "Rose", "job": "java", "age": 36, "sal": 6000, "gender": "female"}
{"index": {"_id": 15}}
{"id": 15, "name": "Will", "job": "dba", "age": 38, "sal": 4500, "gender": "male"}
{"index": {"_id": 16}}
{"id": 16, "name": "smith", "job": "java", "age": 32, "sal": 23000, "gender": "male"}
2.分组统计
查询员工各种语言数量,相当于group by
#查询员工各种语言数量
GET employee/_search
{
"size": 0,
"aggs": {
"languge_count": {
"terms": {
"field": "job"
}
}
}
}
- size:0表示只要统计后的结果,原始数据不展现,如果是大于0,则会返回多少条原始数据
- aggs:固定语法
- languge_count:自定义的分组名称,可以随便写
- terms:按什么字段进行分组
- field:具体的字段名称
3.平均值,最大值,最小值,求和统计
GET employee/_search
{
"size": 0,
"aggs": {
"language_count": {
"terms": {
"field": "job"
},
"aggs":{
"age_avg":{
"avg":{
"field": "age"
}
}
}
}
}
}
- aggs:固定写法
- age_avg:自定义统计名称,随便写
- avg:平均值,其他有 max:最大值,min:最小值,sum:求和
- fileld:要计算的字段
4.分段统计
#按年龄区间分段统计
GET employee/_search
{
"size": 0,
"aggs": {
"language_count": {
"histogram": {
"field": "age",
"interval": 10
},
"aggs":{
"age_avg":{
"sum":{
"field": "age"
}
}
}
}
}
}
- histogram:分段统计
- interval:分段间隔
5.日期分段统计
#按月份统计生日人数
GET employee/_search
{
"size": 0,
"aggs": {
"language_count": {
"date_histogram": {
"field": "borthday",
"interval": "month",
"format": "yyyy-MM-dd",
"min_doc_count": 0,
"extended_bounds": {
"min": "1970-10-01",
"max": "2022-12-31"
} }
}
}
}
- date_histogram:日期分段统计函数
- field:聚合分组的字段,类型需要为date
- interval:按什么时间聚合,interval字段支持多种关键字:year, quarter(季度), month, week, day, hour, minute, second,
- format:返回值格式化
- min_doc_count:0分组后没数据的也显示,最小有多少条才显示
- extended_bounds:强制规定最小值和最大值界限,ES默认把有数据的最小值开始做开始界限
6.同时统计多个集合
#分别统计年龄和性别
GET employee/_search
{
"size": 0,
"aggs": {
"language_count": {
"histogram": {
"field": "age",
"interval": 10
},
"aggs":{
"age_avg":{
"sum":{
"field": "age"
}
}
}
},
"gender_count":{
"terms": {
"field": "gender"
}
}
}
}
三、sql插件
1.插件安装
上面的查询语句为DSL查询,sql插件可以编写sql语句,然后自动解析为DSL语句查询
sql插件github地址:https://github.com/NLPchina/elasticsearch-sql
下载的对应es的版本。
解压后放到 plugins 文件夹并改名为sql,然后重启es
2.sql语句查询
2.1普通查询
GET /_sql?format=txt
{
"query": "select * from employee where job='java'" }
2.2其他查询写法
#普通查询
SELECT * FROM bank WHERE age >30 AND gender = 'm'
#聚合查询(分组统计)
select COUNT(*),SUM(age),MIN(age) as m, MAX(age),AVG(age)
FROM bank GROUP BY gender ORDER BY SUM(age), m DESC
#删除
DELETE FROM bank WHERE age >30 AND gender = 'm'
更多的查询看sql插件的github地址最下面的说明
Elasticsearch使用系列-基本查询和聚合查询+sql插件的更多相关文章
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- Django框架(十)—— 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询
目录 多表操作:增删改,基于对象/双下划线的跨表查询.聚合查询.分组查询.F查询与Q查询 一.创建多表模型 二.一对多增删改表记录 1.一对多添加记录 2.一对多删除记录 3.一对多修改记录 三.一对 ...
- ElasticSearch的高级复杂查询:非聚合查询和聚合查询
一.非聚合复杂查询(这儿展示了非聚合复杂查询的常用流程) 查询条件QueryBuilder的构建方法 1.1 精确查询(必须完全匹配上,相当于SQL语句中的“=”) ① 单个匹配 termQuery ...
- Django的mode的分组查询和聚合查询和F查询和Q查询
1.聚合查询 # 聚合函数aggregate,求指定字段的最大值,最小值,平均值,和的值,方法如下 from django.db.models import Avg from django.db.mo ...
- Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)
摘要: 单表查询 多表查询 聚合查询 分组查询 一.Django ORM 常用字段和参数: 常用字段:#AutoFieldint自增列,必须填入参数primary_key = True,当model中 ...
- Django框架(九)-- 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询
一.创建多表模型 一对一:OneToOneField 一对多:ForeignKey 多对多:ManyToManyField 创建表时,会自动添加一个nid字段,并且自增,所以id可以不用手动创建 On ...
- python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)
12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...
- java 实现mongoDB 增加,删除,修改,查看,多条件查询,聚合查询,分组查询(史上最全)
首先idea创建一手springboot项目 引入如下依赖 <dependency> <groupId>org.mongodb</groupId> <arti ...
- 软件测试最常用的 SQL 命令 | 掌握基本查询、条件查询、聚合查询
1.DML核心CRUD增删改查 缩写全称和对应 SQL: * DML 数据操纵语言:Data Manipulation Language * Create 增加:insert * Retrieve 查 ...
随机推荐
- 手写RPC-简陋版
前言 最近不小心被隔离,放假思考一番,决定开始在手写序列.这个序列在之前看Nacous和网关源码的时候就有想法,只是一直没落实下来,趁着隔离行动起来. 必备知识介绍 序列化与反序列化 序列化是把对象的 ...
- Git_使用SSH密钥操作远端仓库
git支持多种传输协议,ssh协议是其中一种. 初次使用git的用户要使用ssh协议大概需要三个步骤: 生成密钥 设置远程仓库(本文以github为例)上的公钥 把git的 remote url 修改 ...
- linux安装mysql以及使用navicat连接mysql
一.下载mysql 1.获取下载链接 进入官网:https://www.mysql.com 点击downloads --> MySQL Community (GPL) Downloads -- ...
- Go语言系列之标准库os
os包提供了操作系统的系列函数,这些接口不依赖平台.设计为Unix风格的,错误处理是go风格的:调用失败会返回错误值而非错误码.通常错误值里包含更多信息. os包的接口在所有操作系统中都是一致的.非公 ...
- Webstorm安装与配置
一 下载 链接:https://pan.baidu.com/s/1gKxzGWvnoCpXPoe8zzfLnQ 提取码:5lyf 二 安装 https://www.jb51.net/softs/598 ...
- python+selenium 元素定位--iframe
1. 一般webdriver要操作页面元素需要在Top Window的状态下,如下: 2.当浏览器显示iframe时,用正常的元素定位是没有效果的,需要将页面装换到iframe下再对页面元素进行操作 ...
- access注入 - 联合查询
1.access数据库简介 简介:Microsoft Office Access是由微软发布的关系数据库管理系统.它结合了 MicrosoftJet Database Engine 和 图形用户界面两 ...
- jmeter和JDK安装教程(Windows)
1.JDK的安装及环境变量配置 1.JDK的下载安装 JDK官网下载地址:https://www.oracle.com/java/technologies/downloads 然后注册账号,开始下载, ...
- 通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二)
通过HTML+CSS+JavaScript实现鼠标移动到页面顶部导航栏出现,如果移出导航栏3秒又隐藏起来,而且不受滚动条影响(二) 效果:默认一直隐藏导航栏,当滚动条滚到超过300px按钮出现,点击回 ...
- JavaScript 中BOM的常用操作
JavaScript BOM操作 1.获取浏览器窗口尺寸 var width=window,innerWidth //获取可视窗口宽度 var height=window.innerHeight // ...