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 查 ...
随机推荐
- nginx worker_cpu_affinity使用方法
Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU.CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好. 配置Nginx ...
- python appium自动化报“Encountered internal error running command: UnknownError: An unknown server-side error occurred while processing the command. Original error: Could not proxy command to remote server
运行app自动化代码时报"Encountered internal error running command: UnknownError: An unknown server-side e ...
- Jenkins_构建任务提示文件权限不足的处理方法
问题现象 构建任务失败,查看日志提示读取文件权限不足. 问题分析 在linux上查看对应文件,发现这些文件只有root用户才有读的权限,jenkins默认是以jenkins用户在操作linux系统,因 ...
- Leetcode算法系列(链表)之两数相加
Leetcode算法系列(链表)之两数相加 难度:中等给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将 ...
- elasticsearch拼写纠错之Term Suggester
一.什么是拼写纠错 拼写纠错就是搜索引擎可以智能的感知用户输入关键字的错误,并使用纠正过的关键字进行搜索展示给用户:拼写纠错是一种改善用户体验的功能: elasticsearch提供了以下不同类型的s ...
- JSP页面打印输出,两种方法。out、《%=
使用out.println()输出: <%@ page contentType="text/html;charset=UTF-8"%> <html> < ...
- HBase之MinorCompact全程解析
转自:https://blog.csdn.net/u014297175/article/details/50456147 Compact作用 当MemStore超过阀值的时候,就要flush到HDFS ...
- hbase region, store, storefile和列簇,的关系
先来一张大图. Hbase上Regionserver的内存分为两个部分,一部分作为Memstore,主要用来写:另外一部分作为BlockCache,主要用于读数据:这里主要介绍写数据的部分,即Mems ...
- dataTaDataTable 详细教程
DataTable 选项说明 特性 jQueryUI:true/false:控制是否使用jqueryUI样式,需要引入jQueryUI的CSS autoWidth:true/false:控制Datat ...
- 什么是Filter过滤器
一,什么是Filter过滤器: JavaWeb三大组件之一 Filter过滤器是JavaEE的规范.也就是接口 Filter过滤器作用:拦截请求,过滤响应 拦截请求常见的应用场景有: 1,权限检查 2 ...