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. 跟我一起做一个vue的小项目(十一)

    接下来我们进行的是详情页动态路由及banner布局 先看页面的效果 下面是代码部分 <template> <div> <div class="banner&qu ...

  2. SpringMVC + Mybatis + Shiro + ehcache时缓存管理器报错。

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' ...

  3. ubuntn16.04指令

    基础知识: ubuntn中的/表示根目录,包括bin,mnt等文件夹 /home表示家目录,/home/user表示用户下的家目录,/root表示root目录 常用指令: 进入root : sudo ...

  4. js图片碎片效果(移动端也适用)

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. Centos 设置时区

    参考网址: http://jingyan.baidu.com/article/636f38bb268a82d6b84610bd.html //打开设置 tzselect //选择 )Asia → )c ...

  6. web前端学习(一) j2ee环境搭配+jsp中的编码问题

    jsp中的编码问题 pageEncoding是jsp文件本身的编码  contentType的charset是指服务器发送给客户端时的内容编码 我安装tomcat的方法是 安装j2ee的eclipse ...

  7. I Hate It HDU - 1754 (线段树)

    注意点:scanf中使用%c时,会读取空格和回车,所以在%c之前要有一个空格 ( 或者直接使用%s也行,%s会忽略空格和回车 ).具体见下面的代码: #include<iostream> ...

  8. 前端js框架引入管理bundle.js

    最先在ionic中看到bundle.js,,,然而它不是一个框架

  9. MySQL数据库起步 linux安装(更新中...)

    卸载mysql! [root@localhost usr]# yum remove mysql mysql-server mysql-libs compat-mysql51 [root@localho ...

  10. The web application [ROOT] appears to have started a thread named [spring.cloud.inetutils] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:

    前景提要:启动SpringBoot项目报错 原因: DeliveryPointServiceFallBack上面没有加 @Component-_-!