1.回顾

(1)es是什么?

es是基于Apache Lucene的开源分布式(全文)搜索引擎,提供简单的RESTful API来隐藏Lucene的复杂性。

es除了全文搜索引擎之外,还可以这样描述它:

分布式的实时文件存储,每个字段都被索引并可被搜索
分布式的实时分析搜索引擎
可以扩展到成百上千台服务器,处理PB级结构化或非结构化数据。

(2)

数据组织

- 物理:节点和分片
- 逻辑:索引、类型、文档

(3)

简单操作

GET
PUT
DELETE

2.ES的增删改查(curd)

(1)删除之前的数据&数据准备(创建数据)

DELETE s18

PUT s18/doc/
{
"name":"yangyazhou",
"age": ,
"sex": "男",
"tags": "闷骚",
"b": ""
} PUT s18/doc/
{
"name":"yangtao",
"age": ,
"sex": "男",
"tags":"浪",
"b": ""
} PUT s18/doc/
{
"name":"cancan",
"age": ,
"sex":"女",
"tags":"学习认真",
"b":""
} PUT s18/doc/
{
"name":"guchenxu",
"age": ,
"sex": "男",
"tags":"幽默",
"b":""
} PUT s18/doc/
{
"name":"yangwenyu",
"age": ,
"sex": "男",
"tags":"正人君子",
"b":""
}

运行上边的5个操作

(2)查找数据

GET s18/doc/

GET s18/doc/_search

# 查询字符串 query string
GET s18/doc/_search?q=age:

(3)更新,只能更新一个,其他不能更新,(不建议使用)

PUT s18/doc/
{
"tags":"帅气"
} GET s18/doc/

上图是查看到的数据,下面恢复一下数据

(4)只更新指定字段,其他不做修改

#恢复数据
PUT s18/doc/5
{
"name":"yangwenyu",
"age": 23,
"sex": "男",
"tags":"正人君子",
"b":"19941201"
}
# 修改指定字段使用POST
POST s18/doc//_update
{
"doc": {
"tags":"帅气"
}
}

#查看
GET s18/doc/

是否可以按照条件删除?

DELETE s18/doc/

DELETE s18

不建议下图的删除方式

POST s18/doc/_delete_by_query?q=age:

# 查询字符串 query string
GET s18/doc/_search?q=age:

只需要记忆最简单的就可以了

PUT增加  GET查找  POST修改  DELETE删除

3.es查询的两种方式

# 查询的两种方式
# 方式一:查询字符串 query string
GET s18/doc/_search?q=age: # 方式二:DSL GET s18/doc/_search
{
"query": {
"match": {
"age": "18"
}
}
}
GET s18/doc/_search
{
"query": {
"match": {
"age":
}
}
}
#内部已经做好了转化

4.复杂查询之es的match和match_all

match


GET s18/doc/_search
{
"query": {
"match": {
"tags": "浪"
}
}
}

# 报错,不能加在列表里边
GET s18/doc/_search
{
"query": {
"match": {
"tags": ["浪", "闷骚"]
}
}
} #通过空格分隔 GET s18/doc/_search
{
"query": {
"match": {
"tags": "浪 闷骚"
}
}
}
#通过逗号分隔
GET s18/doc/_search
{
"query": {
"match": {
"tags": "浪,闷骚"
}
}
}
#只要符合上边的一个条件就能返回,只是写法不同内部会做一些转换

match_all的用法

#下面的两种方式是等价的
GET s18/doc/_search GET s18/doc/_search
{
"query": {
"match_all": {}
}
}

5.es的sort排序(通常以数字排序)年龄,薪水,分数等等

desc表示从大到小,降序

asc表示从小到大,升序

注意:不是所有的字段都能排序,选择有意义的排序

# 排序 sort
GET s18/doc/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
} GET s18/doc/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "asc"
}
}
]
}

6.es的分页(结构化查询条件是可插拔的优点)

GET s18/doc/_search
GET s18/doc/_search
{
"query": {
"match_all": {}
},
"from": ,
"size":
} #上边查找的是第1条和第2条数据 GET s18/doc/_search
{
"query": {
"match_all": {}
},
"from": ,
"size":
} #上边查找的是第3条和第4条数据 GET s18/doc/_search GET s18/doc/_search
{
"query": {
"match_all": {}
},
"from": ,
"size":
}
#上边查找的是第5条到底15条数据,没有就取到最大值,如果只有1条就只返回1条

分页就是自定制,从哪显示到哪里的意思.

7.es的bool查询should(or) must(and) must_not(not)

#查询yangwenyu或者18岁
GET s18/doc/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "yangwenyu"
}
},
{
"match": {
"age": ""
}
}
]
}
}
}
#这个查询出的结果排序,也就是打分机制存在于内部算法中
#查询性别是男的并且年龄81
GET s18/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"age":
}
},
{
"match": {
"sex": "男"
}
}
]
}
}
}
# 查询性别既不是男的,又不是18岁: must_not
GET s18/doc/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"sex": "男"
}
},
{
"match": {
"age":
}
}
]
}
}
}
# 查询年龄大于20岁的男的文档: gt 大于
GET s18/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"sex": "男"
}
}
],
"filter": {
"range": {
"age": {
"gt":
}
}
}
}
}
}
# gte 大于等于,查询年龄大于等于23的男的
GET s18/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"sex": "男"
}
}
],
"filter": {
"range": {
"age": {
"gte":
}
}
}
}
}
}
# 小于lt 查询年龄小于20的女的

GET s18/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"sex": "女"
}
}
],
"filter": {
"range": {
"age": {
"lt":
}
}
}
}
}
}
# 小于等于lte, 查询年龄小于等于23的男的

GET s18/doc/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"sex": "男"
}
}
],
"filter": {
"range": {
"age": {
"lte":
}
}
}
}
}
}
# filter中尽量用must,避免脏数据
GET s18/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"sex": "男"
}
}
],
"filter": {
"range": {
"age": {
"lte":
}
}
}
}
}
}
# 查询年龄小于等于23的非男性

GET s18/doc/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"sex": "男"
}
}
],
"filter": {
"range": {
"age": {
"lte":
}
}
}
}
}
}

9.es的高亮查询

关键字高亮显示,查询是哪个检索的.

# 高亮查询
# 查询name是cancan的文档
GET s18/doc/_search
{
"query": {
"match": {
"name": "cancan"
}
},
"highlight": {
"fields": {
"name": {}
}
}
} GET s18/doc/_search
{
"query": {
"match": {
"name": "cancan"
}
},
"highlight": {
"pre_tags": "<b style='color:red;font-size:20px;' class='wangdi'>",
"post_tags": "</b>",
"fields": {
"name": {}
}
}
}

#现在只是json结果,只有放在前端才能显示结果

PUT s18/doc/
{
"name":"wangdi",
"desc": "骚的打漂"
} GET s18/doc/_search
{
"query": {
"match": {
"desc": "打漂"
}
},
"highlight": {
"pre_tags": "<b style='color:red;font-size:20px;' class='wangdi'>",
"post_tags": "</b>",
"fields": {
"desc": {}
}
}
}

#上边代表只是高亮显示"打漂"

#高亮显示就是重要的点

10.es的结果字段过滤

# 结果过滤

GET s18/doc/_search
{
"query": {
"match": {
"name": "yangtao"
}
},
"_source": "name"
}

GET s18/doc/_search
{
"query": {
"match": {
"name": "yangtao"
}
},
"_source": ["name", "age", "sex"]
}

我们只需要过滤出,我们需要的字段,减少服务器压力

11.es的聚合

# 聚合查询

# sum,查询所有男生的年龄总和
GET s18/doc/_search
{
"query": {
"match": {
"sex": "男"
}
},
"aggs": {
"my_sum": {
"sum": {
"field": "age"
}
}
}
} # 查询年龄最大的男生 max
GET s18/doc/_search
{
"query": {
"match": {
"sex": "男"
}
},
"aggs": {
"my_max": {
"max": {
"field": "age"
}
}
}
} # 查询年龄最小的 min GET s18/doc/_search
{
"aggs": {
"my_min": {
"min": {
"field": "age"
}
}
}
} # 求平均 avg
GET s18/doc/_search
{
"aggs": {
"my_avg": {
"avg": {
"field": "age"
}
}
}
} # 分组,根据年龄,-,,-, -100,每个年龄段有多少人? GET s18/doc/_search
{
"query": {
"match": {
"sex": "男"
}
},
"aggs": {
"my_group":{
"range": {
"field": "age",
"ranges": [
{
"from": ,
"to":
},
{
"from": ,
"to":
},
{
"from": ,
"to":
}
]
}
}
}
} # 分组,根据年龄,-,,-, -, 对每组年龄求和
GET s18/doc/_search
{
"query": {
"match": {
"sex": "男"
}
},
"aggs": {
"group":{
"range": {
"field": "age",
"ranges": [
{
"from": ,
"to":
},
{
"from": ,
"to":
},
{
"from": ,
"to":
}
]
},
"aggs": {
"my_sum": {
"sum": {
"field": "age"
}
}
}
}
}
}

先分组,再聚合

12.es的mappings之dynamic

homework:

(1)用py脚本制作一键启动es和kibana

(2)倒排索引,把表画出来

ELK2之ELK的语法学习的更多相关文章

  1. Golang 语法学习笔记

    Golang 语法学习笔记 包.变量和函数. 包 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 包名与导入路径的最后一个目录一致."math/rand" 包由 ...

  2. Swift高级语法学习总结(转)

    Swift高级语法学习总结 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参 ...

  3. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  4. Swift高级语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如 ...

  5. Swift基础语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...

  6. Robot Framework语法学习(一)

    Robot Framework语法学习: 一.变量的声明.赋值与使用 1.变量标识符:每个变量都可以用  变量标识符 ${变量名} 来表示. 2.变量声明:可以在TestSuite上点右键或者在Edi ...

  7. MarkDown语法 学习笔记 效果源码对照

    MarkDown基本语法学习笔记 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 下面将对Markdown的基本使用做一个介绍 目 ...

  8. 毕业设计 之 五 PHP语法学习笔记

    毕业设计 之 四 PHP语法学习笔记 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 说明:该笔记是对网站编程语言的详细学习 一.PHP基础 0. 关于环境 ...

  9. 【Python】Python-基础语法学习

    基础语法学习 果然学完 C++ 后再看其他语言的确有很多的共性,只需要熟悉一下python的独特语法和 C++ 中的差异就可以写出一些小的程序,而写得过程中也再次体会出python代码的精简和灵活: ...

随机推荐

  1. mysql日常sql

    重置表 truncate table david_account; 触发器 /* 商户资料更新时更新终端 */ DELIMITER | CREATE TRIGGER bankChange AFTER ...

  2. 做网站-Http状态码详解

    https://mp.weixin.qq.com/s/ZcYG59yLsLCNY2-2k4YqwA HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码 ...

  3. redis 原生操作 & python操作redis

    一.基本介绍 1.简介 Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Ser ...

  4. 从默认的index.jsp页面跳转或转发到其他页面

    使用forward还是redirect都可以完成跳转 forward:浏览器地址不变,所以存在重复提交的问题 <%  pageContext.forward("student/list ...

  5. HTML5属性

    HTML5同时增加和废除了很多属性.下面介绍一些常用的属性. 1.表单属性 为input(type=text).select.textarea与button元素新增了autofocus属性.(它以指定 ...

  6. Vue--vue中的生命周期

    Vue的生命周期: 在理解vue生命周期前要把握它的三个重点: 创建-> 改变 -> 销毁 创建: 1.执行beforeCreate 2.监控data 3.注册事件 4.执行create ...

  7. SVN failed: 405 Method Not Allowed

    SVN update 时,错误:PROPFIND request on '/svn/xxxx' failed: 405 Method Not Allowed. 解决办法如下: 第一步:查看SVN服务器 ...

  8. django1.11启动错误

    错误信息: 复制代码 Unhandled exception in thread started by <function check_errors..wrapper at 0x10f03b8c ...

  9. JavaScript--封装好的运动函数+旋转木马例子

    封装好的运动函数: 1.能控制目标元素的多种属性 2.能自动获取元素的样式表: 3.获取样式函数兼容 4.能对于元素的多属性进行动画(缓动动画)修改 5.能区分透明度等没单位的属性和px属性的变化 a ...

  10. 微信小程序 —— wepy 使用 Vant Weapp

    一.下载 npm i @vant/weapp -S --production 下载完毕之后,就可以在 node_modules 文件夹里,看见下载的包了. 2.移动文件夹 把刚刚下载的包文件夹下的 l ...