从第一篇开始,我用的ES版本就是7.8.0的,与低版本略有不同,不同点可以参考官方介绍,最大的不同就是抛弃 type 这一概念,为了方便测试,首先建立一个学生成绩的索引库(在建立的同时,规定字段类型,并指定IK中文分词)

PUT http://localhost:9200/db_student
{
"mappings": {
"properties": {
"class": {
"type": "integer",
"store": true,
"index":true
},
"chinese": {
"type": "integer",
"store": true,
"index":true
},
"english": {
"type": "integer",
"store": true,
"index":true
},
"math": {
"type": "integer",
"store": true,
"index":true
},
"name": {
"type": "text",
"store": true,
"index":true
},
"school": {
"type": "text",
"store": true,
"index":true,
"analyzer":"ik_max_word"
}
}
}
}

为了方便测试,需要先插入测试数据,如下,一共插入8条记录

PUT http://localhost:/db_student/_doc/
{
"chinese":,
"class":,
"english":,
"math":,
"name":"Vincent",
"school":"华南理工大学"
} PUT http://localhost:/db_student/_doc/
{
"chinese":,
"class":,
"english":,
"math":,
"name":"Kitty",
"school":"华南理工大学"
} PUT http://localhost:/db_student/_doc/
{
"chinese":,
"class":,
"english":,
"math":,
"name":"Thomas",
"school":"华南师范大学"
} PUT http://localhost:/db_student/_doc/
{
"chinese":,
"class":,
"english":,
"math":,
"name":"Lucy",
"school":"华南师范大学"
} PUT http://localhost:/db_student/_doc/
{
"chinese":,
"class":,
"english":,
"math":,
"name":"Lily",
"school":"华南农业大学"
} PUT http://localhost:/db_student/_doc/
{
"chinese":,
"class":,
"english":,
"math":,
"name":"Coco",
"school":"华南农业大学"
} PUT http://localhost:/db_student/_doc/
{
"chinese":,
"class":,
"english":,
"math":,
"name":"Allen",
"school":"中山大学"
} PUT http://localhost:/db_student/_doc/
{"chinese":,
"class":,
"english":,
"math":,
"name":"Zack",
"school":"中山大学"
}

打开 Kibana 可以看到已经插入的数据,如下

数据已经插入,现在可以来实现基本的查询了。

1、查询所有索引库、所有文档

POST  http://localhost:9200/_search
{
"query": {
"match_all": {}
}
}

2、查询索引库 db_student 所有文档

POST  http://localhost:9200/db_student/_search
或者是 http://localhost:9200/db_student/_doc/_search
{
"query": {
"match_all": {}
}
}

3、根据文档编号 id=1 来获取文档

GET  http://localhost:/db_student/_doc/

4、查询 class=10 的学生

注意:term 在这里相当于 = 的逻辑,但是如果是字符串,还可以是包含的逻辑。

POST  http://localhost:/db_student/_search
{
"query": {
"bool":{
"must":[
{"term":{"class":}}
]
}
}
}

5、And 逻辑查询,如查询 class=10 并且 name=vincent 的文档

POST  http://localhost:/db_student/_search
{
"query": {
"bool":{
"must":[
{"term":{"name":"vincent"}},
{"term":{"class":}}
]
}
}
}

6、模糊查询,例如,查询 school 包含 “华南” 的文档

POST  http://localhost:/db_student/_search
{
"query": {
"bool":{
"must":[
{"match":{"school":"华南"}}
]
}
}
}

也可以是term

POST  http://localhost:/db_student/_search
{
"query": {
"bool":{
"must":[
{"term":{"school":"华南"}}
]
}
}
}

7、范围查询,查询 english 大于等于90,小于等于100的文档

注意:from、to 都是闭包的,包含等于

POST   http://localhost:/db_student/_search
{
"query": {
"bool":{
"must":[
{"range":{"english":{"from":,"to":}}}
]
}
}
}

还可以查大于、小于的逻辑,例如查询  english 大于90的文档

注意:gt 表示大于, lt 表示小于 ,这两者都不包含等于

POST http://localhost:/db_student/_search
{
"query": {
"bool":{
"must":[
{"range":{"english":{"gt":}}}
]
}
}
}

8、高亮显示,例如 name 高亮

POST  http://localhost:/db_student/_search
{
"query": {
"term":{"name":"vincent"}
},
"highlight":{
"pre_tags" : "<a class='red'>",
"post_tags" : "</a>",
"fields" : {
"name" : {}
}
}
}

查询结果是:

{
"took": ,
"timed_out": false,
"_shards": {
"total": ,
"successful": ,
"skipped": ,
"failed":
},
"hits": {
"total": {
"value": ,
"relation": "eq"
},
"max_score": .,
"hits": [
{
"_index": "db_student",
"_type": "_doc",
"_id": "",
"_score": .,
"_source": {
"chinese": ,
"class": ,
"english": ,
"math": ,
"name": "Vincent",
"school": "华南理工大学"
},
"highlight": {
"name": [
"<a class='red'>Vincent</a>"
]
}
}
]
}
}

9、分页和排序,先按照 english 倒序,再按 math 升序,每页3条记录,取第一页

POST  http://localhost:/db_student/_search
{
"query": {
"match_all":{}
},
"from": ,
"size": ,
"sort":{
"english" : {"order" : "desc"},
"math": {"order" : "asc"} }
}

查询结果是

{
"took": ,
"timed_out": false,
"_shards": {
"total": ,
"successful": ,
"skipped": ,
"failed":
},
"hits": {
"total": {
"value": ,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "db_student",
"_type": "_doc",
"_id": "",
"_score": null,
"_source": {
"chinese": ,
"class": ,
"english": ,
"math": ,
"name": "Lily",
"school": "华南农业大学"
},
"sort": [
, ]
},
{
"_index": "db_student",
"_type": "_doc",
"_id": "",
"_score": null,
"_source": {
"chinese": ,
"class": ,
"english": ,
"math": ,
"name": "Vincent",
"school": "华南理工大学"
},
"sort": [
, ]
},
{
"_index": "db_student",
"_type": "_doc",
"_id": "",
"_score": null,
"_source": {
"chinese": ,
"class": ,
"english": ,
"math": ,
"name": "Lucy",
"school": "华南师范大学"
},
"sort": [
, ]
}
]
}
}

聚合查询、统计查询等等, 稍后补上

Elasticsearch第三篇:查询详解的更多相关文章

  1. ElasticSearch第四步-查询详解

    ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...

  2. 学会Git玩转GitHub(第三篇) 入门详解 - 精简归纳

    学会Git玩转GitHub(第三篇) 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 10 / 25 转载请注明出处!️ 目录 学会Git玩转GitHub(第三篇) 入门详解 - 精简归纳 ...

  3. elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))

    一.分词器 1. 认识分词器  1.1 Analyzer   分析器 在ES中一个Analyzer 由下面三种组件组合而成: character filter :字符过滤器,对文本进行字符过滤处理,如 ...

  4. Mysql高手系列 - 第9篇:详解分组查询,mysql分组有大坑!

    这是Mysql系列第9篇. 环境:mysql5.7.25,cmd命令中进行演示. 本篇内容 分组查询语法 聚合函数 单字段分组 多字段分组 分组前筛选数据 分组后筛选数据 where和having的区 ...

  5. Mysql高手系列 - 第12篇:子查询详解

    这是Mysql系列第12篇. 环境:mysql5.7.25,cmd命令中进行演示. 本章节非常重要. 子查询 出现在select语句中的select语句,称为子查询或内查询. 外部的select查询语 ...

  6. 《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)

    1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,于是写了这一篇文章,另外也是 ...

  7. 《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)

    1.简介 前边几篇文章是宏哥自己在本地弄了一个单选和多选的demo,然后又找了网上相关联的例子给小伙伴或童鞋们演示了一下如何自动化测试,这一篇宏哥在网上找了一个问卷调查,给小伙伴或童鞋们来演示一下.上 ...

  8. ThinkPHP视图查询详解

    ThinkPHP视图查询详解 参考http://www.jb51.net/article/51674.htm   这篇文章主要介绍了ThinkPHP视图查询,需要的朋友可以参考下     ThinkP ...

  9. elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)

    一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...

  10. (转)Mysql 多表查询详解

    MySQL 多表查询详解 一.前言  二.示例 三.注意事项 一.前言  上篇讲到mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有 ...

随机推荐

  1. Web For Pentester靶场(xss部分)

    配置 官网:https://pentesterlab.com/ 下载地址:https://isos.pentesterlab.com/web_for_pentester_i386.iso 安装方法:虚 ...

  2. Vue脚手架的搭建和路由配置

  3. 太实用了!自己动手写软件——我们的密码PJ器终于完成了

    之前我们完成了密码破解工具的界面,今天我们来看看功能实现吧. 目录 编码 提交——功能实现 开始破解——功能实现 读取密码字典 选择协议并执行破解动作 POP3协议的破解函数 IMAP协议的破解函数 ...

  4. python Scrapy 从零开始学习笔记(一)

    在之前我做了一个系列的关于 python 爬虫的文章,传送门:https://www.cnblogs.com/weijiutao/p/10735455.html,并写了几个爬取相关网站并提取有效信息的 ...

  5. Python程序设计(第3版)PDF高清完整版免费下载|百度网盘

    百度网盘:Python程序设计(第3版)PDF高清完整版免费下载 提取码:48u4 内容简介 本书是面向大学计算机科学专业第一门程的教材.本书以Python语言为工具,采用相当传统的方法,强调解决问题 ...

  6. ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解

    简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...

  7. 800页的《数据随想录》PDF版电子书|百度网盘免费下载|数据科学领域必读

    百度网盘免费下载|<数据随想录> 提取码:51y7 本电子书内容包含从数据埋点到数据可视化整个链条的内容,同时,也整理了很多小伙伴们在交流社区中常问到的问题<数据百问>系列 数 ...

  8. 解决移动端rem加载瞬间页面错乱的方法(放大或者缩小)

    移动端布局有很多种,这里我们最常使用到rem+百分比的布局方式(高度/字体设置rem单位,宽度设置百分比)来处理屏幕兼容,这种方法在兼容上是比较不错的,可以使得字体以及整体适应各种大小的屏幕,可以解决 ...

  9. 如何查看Oracle的版本

    本人使用的软件是DataGrip 在控制台输入 select * from v$version;

  10. PHP mysqli_refresh() 函数

    定义和用法 mysqli_refresh() 函数刷新表或缓存,或者重置复制服务器信息.高佣联盟 www.cgewang.com 语法 mysqli_refresh(connection,option ...