美文网首页springbootMySQL
2.Elasticsearch及ELK

2.Elasticsearch及ELK

作者: Junma_c631 | 来源:发表于2020-10-24 13:16 被阅读0次
    image.png

    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并不适用于有跳页的情景

    1. scroll=5m表示设置scroll_id保留5分钟可用。
    2. 使用scroll必须要将from设置为0。
    3. 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日志收集环境:

    相关文章

      网友评论

        本文标题:2.Elasticsearch及ELK

        本文链接:https://www.haomeiwen.com/subject/ykkumktx.html