Elasticsearch 实战 - 第四讲:ES 高级查询
Elasticsearch 实战 - 第四讲:ES 高级查询
- Elasticsearch 实战系列文章:
- 一、高级查询
- 1、简介
- 2、结果排序
- 3、分页查询
- 4、检索查询
- 5、关键字查询
- 6、高亮显示
- 7、逻辑查询
- 8、过滤查询
- 9、分组查询
Elasticsearch 实战系列文章:
1:Elasticsearch 实战 - 第一讲:简介以及安装
2:Elasticsearch 实战 - 第二讲:kibana 安装以及ES 的概念名词
3:Elasticsearch 实战 - 第三讲:ES 基本操作、批处理
4:Elasticsearch 实战 - 第四讲:ES 高级查询
5:Elasticsearch 实战 - 第五讲:Java 集成 Spring Data Elasticsearch(一):简介及环境搭建
6:Elasticsearch 实战 - 第六讲:ES 项目实战(二):基本操作、批处理、高级查询
一、高级查询
1、简介
Elasticsearch基于JSON提供完整的查询DSL(Domain Specific Language:领域特定语言)来定义查询。
基本语法: GET /索引名/类型名/_search
一般都是需要配合查询参数来使用的,配合不同的参数有不同的查询效果.
参数配置项可以参考博客:https://www.jianshu.com/p/6333940621ec
2、结果排序
参数格式:
GET /索引/类型/_search
{ "sort": [ {field: 排序规则},... ]
}
排序规则:
- asc:表示升序
- desc:表示降序
没有配置排序的情况下,默认按照评分降序排列
示例如下:
GET /user/user/_search
{"sort": [{"age": {"order": "desc"}}]
}
3、分页查询
参数格式:
from:从什么地方开始
size:到什么地方结束
GET /索引/类型/_search
{ "from": start,"size": pageSize
}
示例如下:
GET /product/product/_search
{"from": 0, "size": 3
}
4、检索查询
参数格式:
GET /索引/类型/_search
{"query": {检索方式: {field: value}}
检索方式:
- term表示精确匹配,value值不会被分词器拆分,按照倒排索引匹配 。
- match表示全文检索,value值会被分词器拆分,然后去倒排索引中匹配 。
- range表示范围检索,其value值是一个对象,如{ “range”: {field: {比较规则: value, …}} } 比较规则有gt / gte / lt / lte 等。
注意:term和match都能用在数值和字符上,range多用在数值上。
示例如下:
# 查询商品中价格为 1899.99的
GET /product/_search
{"query": {"term": {"price": {"value": "1899.99"}}}
}# 查询商品标题中带有鼠标,手机的
GET /product/_search
{"query": {"match": {"title": "小米 手机"}}
}# 查询商品价格在1600~2800 之间的
GET /product/_search
{"query": {"range": {"price": {"gte": 1600,"lte": 2800}}}
}
5、关键字查询
参数格式:
GET /索引/类型/_search
{"query": {"multi_match": { "query": value, "fields": [field1, field2, ...] } }
}
multi_match:表示在多个字段间做检索,只要其中一个字段满足条件就能查询出来,多用在字符上。
示例如下:
# 查询商品产地和标题中匹配 vivo 湛江 的数据
GET /product/product/_search
{"query": {"multi_match": {"query": "vivo 湛江","fields": ["origin","title"]}}
}
6、高亮显示
参数格式:
GET /索引/类型/_search
{ "query": { ... }, "highlight": {"fields": { field1: {}, field2: {}, ... },"pre_tags": 开始标签, "post_tags" 结束标签}
}
highlight:表示高亮显示,需要在fields中配置哪些字段中检索到该内容需要高亮显示 必须配合检索(term / match)一起使用。
示例如下:
# 查询商品标题中带有鼠标的,并且高亮显示
GET /product/_search
{"query": {"match": {"title": "鼠标"}},"highlight": {"fields": {"title": {}}}
}
7、逻辑查询
参数格式:
GET /索引/类型/_search
{"query": {"bool": {逻辑规则: [ {检索方式: {field: value}},... ],... } }
}
逻辑规则:must / should / must_not,相当于and / or / not
示例如下:
# 查询手机的价格在1900~2800之间的
GET /product/_search
{"query": {"bool": {"must": [{"term": {"title": {"value": "手机"}}},{"range": {"price": {"gte": 1900,"lte": 2800}}}]}}
}
8、过滤查询
参数格式:
GET /索引/类型/_search
{ "query": {"bool": {"filter": [ { 检索方式: {field: value } }, ... ] } }
}
从效果上讲过滤查询和检索查询能做一样的效果。区别在于过滤查询不评分,结果能缓存,检索查询要评分,结果不缓存。 一般是不会直接使用过滤查询,都是在检索了一定数据的基础上再使用。
示例如下:
# 查询手机的价格在1900~2800之间的
GET /product/_search
{"query": {"bool": {"must": [{"term": {"title": {"value": "手机"}}}],"filter": {"range": {"price": {"gte": 1900,"lte": 2800}}}}}
}
9、分组查询
参数格式:
GET /索引/类型/_search
{ "size": 0, "aggs": { 自定义分组字段: {"terms": { "field": 分组字段, "order": {自定义统计字段:排序规则}, "size": 10 //默认显示10组 },"aggs": { //分组后的统计查询,相当于MySQL分组函数查询 自定义统计字段: { 分组运算: { "field": 统计字段 } } } } }
}
分组运算:avg / sum / min / max / value_count / stats(执行以上所有功能的)
注意:这里是size=0其目的是为了不要显示hit内容,专注点放在观察分组上。
题外话: ES 的操作在这里已经讲完,下篇博客将给大家带来 Java 中是如何操作ES 进行各种操作的。
更多资讯请扫描以下二维码或关注微信公号“愿为最亮星”,为您提供更深层次的解答。
Elasticsearch 实战 - 第四讲:ES 高级查询相关推荐
- Elasticsearch 实战 - 第三讲:ES 基本操作、批处理
Elasticsearch 实战 - 第三讲:ES 基本操作.批处理 Elasticsearch 实战系列文章: 一:ES的基本操作 1.索引操作 1.1.建立索引 1.2.删除索引 1.3.查询索引 ...
- SpringBoot整合ES高级查询
SpringBoot整合ES高级查询 springboot版本:2.0.5.RELEASE elasticsearch版本:7.9.1 1.配置 引入依赖: <dependency>< ...
- 标准中心项目实战第四讲:标准中心整体业务架构
项目结构采用了star方法,Situation:概括性的总结业务背景和挑战:Task:介绍你负责的任务已经需要达成的目标:Action:项目中你采取的关键行动:Result:项目落地后的实际效果.项目 ...
- Beego脱坑(十四)ORM高级查询
title: Beego脱坑(十四)ORM高级查询 tags: go,beego,orm author : Clown95 本文将讲述beego ORM的一些高级查询,这也是ORM最核心的部分,本文所 ...
- Elasticsearch高级查询2:ES 高级查询
一.高级查询 1.简介 Elasticsearch基于JSON提供完整的查询DSL(Domain Specific Language:领域特定语言)来定义查询. 基本语法: GET /索引名/类型名/ ...
- Elasticsearch实战(四)---中英文分词及拼音搜索
Elasticsearch实战-中英文分词及拼音搜素 文章目录 Elasticsearch实战-中英文分词及拼音搜素 1.ElasticSearch 中英文分词插件 1.1 分词插件 1.2 默认分词 ...
- elasticsearch(es)高级查询api
yml配置 #es配置 spring:elasticsearch:rest:uris: 192.168.16.188:9200 添加依赖 <dependency><groupId&g ...
- 数据库实验四:数据高级查询
真给我整无语了,数据库实验怎么这么多,要考试还要写实验.写写写,写他娘的什么东西. 实验内容 实现查询 ps:实验要求用两种方法写的我除了union都是用的两种方法写,union查了好久都查不到,或许 ...
- mysql查询职位大于3_mysql学习第四天(高级查询)
-- 第七章 -- 1.查询入职日期最早和最晚的日期 select min(hiredate),max(hiredate) from emp -- 2.查询职位以SALES开头的所有员工平均工资,最低 ...
最新文章
- myecplise 添加svn插件
- 数据中心进水了怎么办?数据中心如何防洪?
- google us web
- CentOS7的/tmp目录自动清理规则(转)
- 【BUG记录】Matisse显示的图片乱序或者在全部项不显示
- C++设计模式之二 AbstractFactory模式
- 云+X案例展 | 民生类:京东云突破数据中心光互联瓶颈
- idea 检测 重复代码_IDEA关掉重复代码波浪线
- 前窗玻璃膜贴了一周还有气泡_汽车玻璃膜贴全部好还是贴局部好?
- 【笔记】JavaScript高级篇——面向对象、原型、继承
- JavaScript——JQuery原理介绍及模拟
- spring data jpa 查询部分字段列名无效问题
- Ubuntu 12.04 root默认密码? 如何使用root登录?
- Java数据库面试题
- C++默认参数(缺省参数)应该写在哪里,声明还是定义里
- 百度搜索信风算法上线,为什么要严厉打击翻页诱导行为?
- fast无线路由器设置服务器,迅捷(FAST)路由器静态ip上网设置方法
- 国外邮件服务器,在国外发邮件连不上国内的邮件服务器
- 系统架构图编写(概要设计)
- CTF解题记录-Misc-“短信”
热门文章
- 将列表按字母排序如通讯录
- 小程序错误:[app.json文件内容错误]app.json未找到
- 如何从Project数据库中读取mpp文件中自定义域以及自定义大纲代码
- 荣耀全明星不显示服务器,LoveLive!学园偶像祭 全明星无法连接服务器是什么原因...
- 苹果手机如何设置铃声
- 高德地图搜索,点击地图获取经纬度
- 【华为交换机配置命令大全】
- sqlserver2005 sql server database services安装失败解决方法
- 不思议迷宫量子计算机,不思议迷宫男巫刷法及男巫的猫形态详解
- HBase(6):HBase优化