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 查 ...
随机推荐
- Lomsat gelral
题目描述 You are given a rooted tree with root in vertex 11 . Each vertex is coloured in some colour. Le ...
- K210,yolo,face_mask口罩检测模型训练及其在K210,kd233上部署
前段时间考研,再加上工作,时间很紧,一直没有更新博客,这几天在搞k210的目标检测模型,做个记录,遇到问题可以添加qq522414928或添加微信13473465975,共同学习 首先附上github ...
- JS获取树的父节点及祖先节点
主体函数 export function findAllParent (node, tree, parentNodes = [], index = 0) { if (!node || node.fid ...
- angularJS中$digest already in progress报错解决方法
看到一个前端群里有人问,就查了下解决"$digest already in progress"最好的方式,就是不要使用$scope.$apply()或者$scope.$digest ...
- 深度学习之BP算法
1.介绍 人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是在现代生物学研究人脑组织所取得成果的基础上提出来的.人工神经网络是大脑生物结构的数学建模,有 ...
- 求n以内最大的k个素数以及它们的和
本题要求计算并输出不超过n的最大的k个素数以及它们的和. 输入格式: 输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值. 输出格式: 在一行中按下列格式输出: 素数1+素数2+-+素 ...
- TextBox,RichTextBox设置行高
/// <summary> /// 设置行距 /// </summary> /// <param name="ctl">控件</param ...
- Manacher算法求解回文字符串
Manacher算法可以在\(O(N)\)时间内求解出一个字符串的所有回文子串(正反遍历相同的字串). 注:回文串显然有两种,一种是奇数长度,如abczcba,有一个中心字符z:另外一种是偶数个长度, ...
- golang中goroutine
1. 概念 goroutine 奉行通过通信来共享内存,而不是共享内存来通信 goroutine 是由go的运行时(runtime)调度和管理的 go程序会智能的将goroutine中的任务合理的分配 ...
- /etc/passwd详解
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/n ...