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: 排序规则},... ]
}

排序规则:

  1. asc:表示升序
  2. 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 高级查询相关推荐

  1. Elasticsearch 实战 - 第三讲:ES 基本操作、批处理

    Elasticsearch 实战 - 第三讲:ES 基本操作.批处理 Elasticsearch 实战系列文章: 一:ES的基本操作 1.索引操作 1.1.建立索引 1.2.删除索引 1.3.查询索引 ...

  2. SpringBoot整合ES高级查询

    SpringBoot整合ES高级查询 springboot版本:2.0.5.RELEASE elasticsearch版本:7.9.1 1.配置 引入依赖: <dependency>< ...

  3. 标准中心项目实战第四讲:标准中心整体业务架构

    项目结构采用了star方法,Situation:概括性的总结业务背景和挑战:Task:介绍你负责的任务已经需要达成的目标:Action:项目中你采取的关键行动:Result:项目落地后的实际效果.项目 ...

  4. Beego脱坑(十四)ORM高级查询

    title: Beego脱坑(十四)ORM高级查询 tags: go,beego,orm author : Clown95 本文将讲述beego ORM的一些高级查询,这也是ORM最核心的部分,本文所 ...

  5. Elasticsearch高级查询2:ES 高级查询

    一.高级查询 1.简介 Elasticsearch基于JSON提供完整的查询DSL(Domain Specific Language:领域特定语言)来定义查询. 基本语法: GET /索引名/类型名/ ...

  6. Elasticsearch实战(四)---中英文分词及拼音搜索

    Elasticsearch实战-中英文分词及拼音搜素 文章目录 Elasticsearch实战-中英文分词及拼音搜素 1.ElasticSearch 中英文分词插件 1.1 分词插件 1.2 默认分词 ...

  7. elasticsearch(es)高级查询api

    yml配置 #es配置 spring:elasticsearch:rest:uris: 192.168.16.188:9200 添加依赖 <dependency><groupId&g ...

  8. 数据库实验四:数据高级查询

    真给我整无语了,数据库实验怎么这么多,要考试还要写实验.写写写,写他娘的什么东西. 实验内容 实现查询 ps:实验要求用两种方法写的我除了union都是用的两种方法写,union查了好久都查不到,或许 ...

  9. mysql查询职位大于3_mysql学习第四天(高级查询)

    -- 第七章 -- 1.查询入职日期最早和最晚的日期 select min(hiredate),max(hiredate) from emp -- 2.查询职位以SALES开头的所有员工平均工资,最低 ...

最新文章

  1. myecplise 添加svn插件
  2. 数据中心进水了怎么办?数据中心如何防洪?
  3. google us web
  4. CentOS7的/tmp目录自动清理规则(转)
  5. 【BUG记录】Matisse显示的图片乱序或者在全部项不显示
  6. C++设计模式之二 AbstractFactory模式
  7. 云+X案例展 | 民生类:京东云突破数据中心光互联瓶颈
  8. idea 检测 重复代码_IDEA关掉重复代码波浪线
  9. 前窗玻璃膜贴了一周还有气泡_汽车玻璃膜贴全部好还是贴局部好?
  10. 【笔记】JavaScript高级篇——面向对象、原型、继承
  11. JavaScript——JQuery原理介绍及模拟
  12. spring data jpa 查询部分字段列名无效问题
  13. Ubuntu 12.04 root默认密码? 如何使用root登录?
  14. Java数据库面试题
  15. C++默认参数(缺省参数)应该写在哪里,声明还是定义里
  16. 百度搜索信风算法上线,为什么要严厉打击翻页诱导行为?
  17. fast无线路由器设置服务器,迅捷(FAST)路由器静态ip上网设置方法
  18. 国外邮件服务器,在国外发邮件连不上国内的邮件服务器
  19. 系统架构图编写(概要设计)
  20. CTF解题记录-Misc-“短信”

热门文章

  1. 将列表按字母排序如通讯录
  2. 小程序错误:[app.json文件内容错误]app.json未找到
  3. 如何从Project数据库中读取mpp文件中自定义域以及自定义大纲代码
  4. 荣耀全明星不显示服务器,LoveLive!学园偶像祭 全明星无法连接服务器是什么原因...
  5. 苹果手机如何设置铃声
  6. 高德地图搜索,点击地图获取经纬度
  7. 【华为交换机配置命令大全】
  8. sqlserver2005 sql server database services安装失败解决方法
  9. 不思议迷宫量子计算机,不思议迷宫男巫刷法及男巫的猫形态详解
  10. HBase(6):HBase优化