2.Elasticsearch及ELK
springboot和es整合版本兼容问题:
https://blog.csdn.net/PAcee1/article/details/102883129
语雀地址:
https://www.yuque.com/books/share/9f4576fb-9aa9-4965-abf3-b3a36433faa6/ice1ww
现有环境:
虚拟机环境:E:\VMware\node02 Centos7 user/password:taibai/123456
学习文档路径:E:\BaiduNetdiskDownload\鲁班收费\三期课程\项目相关\ES课件
安装el后启动报错无法解决时:
https://blog.csdn.net/u011659193/article/details/85318794
elasticsearch-head:elasticsearch的客户端图形化工具,可以查看节点的情况。
elasticsearch-head安装教程:
文件已下载:E:\BaiduNetdiskDownload\鲁班收费\三期课程\项目相关\ES课件\ES安装工具\es-head-master\es-head-master
https://www.cnblogs.com/wzx1blog/p/13066693.html
kibana:restFull风格的请求发送工具。
安装后的环境地址:
elasticsearch:http://192.168.29.134:9200
kibana:http://192.168.29.134:5601/
二、elasticsearch与传统数据库的概念对比:
image三、elasticsearch语法练习题
官方文档练习案例:
1.给指定id加点年龄(age)
2.执行match_all
操作,并按帐户余额降序对结果进行排序,并返回前10个
3.如何从搜索中返回两个字段,即帐号和余额
4.返回帐户为20的
5.回地址中包含“mill”的所有帐户
6.返回地址中包含“mill”或“lane”的所有帐户
7.返回地址中包含“mill”和“lane”的所有帐户
8.地址中既不包含“mill”也不包含“lane”的所有帐户
9.返回所有40岁但不居住在ID的人(state不等于ID)的账户
10.使用bool查询返回余额在20000到30000之间的所有帐户,包括余额。换句话说,我们希望找到余额大于或等于20000,小于或等于30000的账户
11.按状态(state)对所有帐户进行分组,然后返回按count降序排列的前10个
12.按状态计算平均帐户余额(同样只针对按count降序排列的前10个状态)
13.基于之前(12)的聚合,我们现在按降序对平均余额排序
14.按照年龄等级(20-29岁,30-39岁,40-49岁)分组,然后按性别分组,最后得到每个年龄等级,每个性别的平均账户余额
分页查询
GET /taibai/_search?size=1&from=2 size: 结果数,默认10 from: 跳过开始的结果数,默认0
分页一
浅分页,它的原理很简单,就是查询前20条数据,然后截断前10条,只返回10-20的数据。这样其实白白浪费了前10条的查询
GET /bank/_search
{
"sort": [
{
"age": {
"order": "desc"
}
}
],
"size": 1000,
"from": 0
}
分页二
scroll 深分页,使用scroll,每次只能获取一页的内容,然后会返回一个scroll_id。根据返回的这个scroll_id可以不断地获取下一页的内容,所以scroll并不适用于有跳页的情景
- scroll=5m表示设置scroll_id保留5分钟可用。
- 使用scroll必须要将from设置为0。
- size决定后面每次调用_search搜索返回的数量
GET /bank/_search?scroll=5m
{
"size": 20,
"from": 0,
"sort": [
{
"_id": {
"order": "desc"
}
}
]
}
会返回一个:
"_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAB9AWTVIyY1pKcmhUT0dBT1FXLU5ueHdDQQ=="
以后调用:
GET _search/scroll
{
"scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAABMIWTVIyY1pKcmhUT0dBT1FXLU5ueHdDQQ==",
"scroll": "5m"
}
删除scroll_id
DELETE _search/scroll/DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAABMIWTVIyY1pKcmhUT0dBT1FXLU5ueHdDQQ==
删除所有scroll_id
DELETE _search/scroll/_all
注意:根据官方文档的说法,scroll是非常消耗资源的,所以一个建议就是当不需要了scroll数据的时候,尽可能快的把scroll_id显式删除掉。scroll 的方式,官方的建议不用于实时的请求(一般用于数据导出),因为每一个 scroll_id 不仅会占用大量的资源,而且会生成历史快照,对于数据的变更不会反映到快照上。
分页三
search_after 深分页,是根据上一页的最后一条数据来确定下一页的位置,同时在分页请求的过程中,如果有索引数据的增删改查,这些变更也会实时的反映到游标上。但是需要注意,因为每一页的数据依赖于上一页最后一条数据,所以无法跳页请求。为了找到每一页最后一条数据,每个文档必须有一个全局唯一值,官方推荐使用 _uid 作为全局唯一值,其实使用业务层的 id 也可以。使用search_after必须要设置from=0。
GET /bank/_search
{
"size": 20,
"from": 0,
"sort": [
{
"_id": {
"order": "desc"
}
}
]
}
拿到返回最后一条数据的_id
GET /bank/_search
{
"size": 20,
"from": 0,
"sort": [
{
"_id": {
"order": "desc"
}
}
],
"search_after": [
980
]
}
6.5聚合
https://www.elastic.co/guide/en/elasticsearch/reference/7.x/search-aggregations.html
avg :平均值
max:最大值
min:最小值
sum:求和
例如:查询平均年龄 (如果不指定size等于0,则还会返回10条数据)
POST /bank/_search
{
"aggs": {
"taibai": { //自定义名字
"avg": { //什么类型
"field": "age" //那个字段
}
}
},
"size": 0
}
使用脚本
POST /bank/_search
{
"aggs": {
"taibai": {
"avg": {
"script": {
"source": "doc.age.value"
}
}
}
},
"size": 0
}
cardinality : 去重统计
例如:
POST /bank/_search
{
"aggs": {
"taibai": {
"cardinality": {
"field": "age"
}
}
},
"size": 0
}
extended_stats扩展统计聚合
POST /bank/_search
{
"aggs": {
"taibai": {
"extended_stats": {
"field": "age"
}
}
},
"size": 0
}
value_count值计数统计
可以理解为统计个数
terms词聚合
基于某个field,该 field 内的每一个【唯一词元】为一个桶,并计算每个桶内文档个数。默认返回顺序是按照文档个数多少排序。
POST /bank/_search
{
"aggs": {
"taibai": {
"terms": {
"field": "age"
}
}
},
"size": 0
}
top_hits最高匹配权值聚合
获取到每组前n条数据,相当于sql 中Top(group by 后取出前n条)。它跟踪聚合中相关性最高的文档
POST /bank/_search
{
"aggs": {
"taibai": {
"terms": {
"field": "age"
},
"aggs": {
"count": {
"top_hits": {
"size": 3
}
}
}
}
},
"size": 0
}
range范围
POST bank/_search
{
"aggs": {
"group_by_age": {
"range": {
"field": "age",
"ranges": [
{
"from": 20,
"to": 30
},
{
"from": 30,
"to": 40
},
{
"from": 40,
"to": 50
}
]
}
}
},
"size": 0
}
ELK日志收集环境: