zoukankan      html  css  js  c++  java
  • ELK 学习笔记

    ElasticSearch 语法(可在Kibana的Dev Tools控制台中应用)官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html

    1. Elasticsearch中,索引相当于MySQL中的数据库,类型相当于数据库中的表,即索引名就为数据库库名,类型就为表名.

    • _index: 索引(库)
    • _type:类型(表)
    • _id: ID(一条记录的唯一标识)

    2. ElasticSearch中的keyword和text的区别:text类型:会分词,先把对象进行分词处理,然后再再存入到es中。当使用多个单词进行查询的时候,当然查不到已经分词过的内容!keyword:不分词,没有把es中的对象进行分词处理,而是存入了整个对象!这时候当然可以进行完整地查询!默认是256个字符!

    3. 性能优化

    4. 并发控制:

    多个用户对一份数据进行修改操作时,变更越频繁,读数据和更新数据的间隙越长,也就越可能丢失变更。在数据库领域中,有两种方法通常被用来确保并发更新时变更不会丢失:

    1.悲观并发控制(悲观锁)

      这种方法被关系型数据库广泛使用,它假定有变更冲突可能发生,因此阻塞访问资源以防止冲突。 一个典型的例子是读取一行数据之前先将其锁住,确保只有放置锁的线程能够对这行数据进行修改。当用户A和用户B同时去访问同一篇文章时,用户A先读取初始值100后,在这过程中直接加锁,然后去更新访问量,并写入。在这过程中,用户B也会去访问该篇文章的访问量,但是这时会被锁住。当等用户A更新完成后,释放锁后,B才后读取被A更新的值101,在这基础上+1.这种方法跟java中在方法上加上同步synchronized关键字,这种方法比较容易理解和控制,但是并发能力很低。

    2.乐观并发控制(乐观锁)

      Elasticsearch 中使用的这种方法假定冲突是不可能发生的,并且不会阻塞正在尝试的操作。 然而,如果源数据在读写当中被修改,更新将会失败。应用程序接下来将决定该如何解决冲突。 例如,可以重试更新、使用新的数据、或者将相关情况报告给用户。es中采用就是乐观锁的机制。乐观锁不加锁。假如用户A和用户B同时去点击同一篇文章,该篇文章的访问量要+2。es中引入一个版本号的概念。用户A会先去获取es中的访问量值,拿到版本号,判断当前版本号是否一致,如果版本号一致,更新,并且版本号+1,es的访问量变为101,version=2,用户B一开始也是version=1,当A更新后version=2,与判断和自己的版本号不一致,这时es不会去重新更新es的值,而是重新获取(GET)当前document的version,然后在此版本号上再去重新更新数据。

    5. 

    6.


    n. Kibana Dev Tools中:

    • Dev Tools中的命令是 ElasticSearch的语法(并非Kibana的语法,Kibana只是负责展示数据的一个界面)
    • 在Dev Tools中快捷键·ctrl + /`可以打开相关命令的官方文档,或者点击扳手,点击Open Documentation.

    n.1. `GET _cat/indices` 获取所有的索引名称(数据库)

    n.2 

    一些配置命令等:
    
    PUT index_name/_settings //index_name ---> tk_question / .kibana_task_manager
    {
      "index.blocks.read_only_allow_delete":"false" //或者设置为null,表示阻止只读,即开放删除、更改权限
    }
    PUT _cluster/settings { "persistent": { "search.max_buckets": 20000 } }
    GET tk_question/_search
    {
      "query": {
        "match_all": {}
      }
    }
    ElasticSearch查询文档数量
    GET tk_paper/_search { "size": 0,//size的数值表示返回的文档个数,0表示不返回具体文档信息, "track_total_hits": true//返回精确的数量 } 返回结果: { "took" : 0, "timed_out" : false, "_shards" : { "total" : 3, "successful" : 3, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 24266, //这里是实际数量 "relation" : "eq" // 等于 }, "max_score" : null, "hits" : [ ] } }
    //查询
    GET tk_question/_search
    {
      "query": {
        "match": {
          "uuid": "0bcd9c7d-934b-4c11-b725-af0a341afaf4"
        }
      },
      "size": 0,//size的值表示返回的文档个数,0表示不返回具体文档信息
      "track_total_hits": true//返回精确的数量

    }
     
    //ES中的 terms 关键字实现类似 in 的操作
    GET tk_question/_search
    {
      "query": {
        "terms": {
          "uuid" : ["1f2e856b-4956-459f-91c2-3edc4c06f1b3","42cfe0d1-bd19-4081-8970-96e191a515f3"]
        }
      }
    }
     

    // 删除
    // 根据指定条件删除文档 新版废弃了类型(表名),即不需要第二级的_doc(2020年8月6日10:52:00)
    POST tk_question/_doc/_delete_by_query?conflicts=proceed
    {
      "query":{
        "match":{
          "uuid":"b87e6441-5630-4576-9822-a701d17f4a26"
        }
      }
    }
    //清库!!!!!!
    post tk_question/_delete_by_query
    {
        "query":{
            "match_all":{}
        }
    }
    // 删除ES中的一个字段
    POST tk_question/_update_by_query
    {
      "query":{
        "match":{
          "uuid" : "10f648d6-a72e-4c0e-81b7-fd7204de6ad3"
        }
      },
      "script":{
        "source":"ctx._source.remove('show')"
      }
    }

     

    // 更新
    // 2020年8月6日10:53:10 更新Elastic中某条记录中的字段show,如果原来没有会新增.
    POST tk_question/_update_by_query
    {
      "query":{
        "match":{
          "uuid" : "10f648d6-a72e-4c0e-81b7-fd7204de6ad3"
        }
      },
      "script":{
        "inline":"ctx._source.show=params.show",//inline已废弃,使用source
        "params":{
          "show":2
        },
        "lang":"painless"
      }
    }
    //新版写法:https://www.cnblogs.com/sanduzxcvbnm/p/12719660.html
    POST tk_question/_update_by_query
    {
      "query":{
        "match":{
          "uuid" : "10f648d6-a72e-4c0e-81b7-fd7204de6ad3"
        }
      },
      "script":{
        "source":"ctx._source['show']=3"
      }
    }


    
    
    // 测试
    POST a/_doc/testDocId
    {
      "id":"3",
      "uuid":"aaa"
    }
    GET a/_doc/testDocId
    DELETE a/_doc/testDocId
    DELETE a
    GET a
    DELETE tk_question/_doc/5e1dc35ee29b0318dc45cc70
     
    _source https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-source-filtering+
    
    GET tk_question/_search
    {
    "_source": "knowledgeLevels",
    "size": 20
    }
    
    GET tk_question/_search
    {
    "_source": false,
    "size": 20
    }
    
    GET tk_question/_search
    {
    "_source": "knowledgeLevels.code",
    "size": 20
    }
    慢日志查询     https://blog.csdn.net/donghaixiaolongwang/article/details/79208457
    
    #注:配置不一定都需要,自己选择需要那种级别(warn、info、debug、trace)日志关闭的话配置成-1就可以了
    
    PUT tk_question/_settings
    {
    "index.search.slowlog.threshold.query.warn": "10s",
    "index.search.slowlog.threshold.query.info": "5s",
    "index.search.slowlog.threshold.query.debug": "2s",
    "index.search.slowlog.threshold.query.trace": "500ms",
    "index.search.slowlog.threshold.fetch.warn": "1s",
    "index.search.slowlog.threshold.fetch.info": "800ms",
    "index.search.slowlog.threshold.fetch.debug": "500ms",
    "index.search.slowlog.threshold.fetch.trace": "200ms"
    }
    
     
    
    PUT tk_question/_settings
    {
    "index.indexing.slowlog.threshold.index.warn": "10s",
    "index.indexing.slowlog.threshold.index.info": "5s",
    "index.indexing.slowlog.threshold.index.debug": "2s",
    "index.indexing.slowlog.threshold.index.trace": "500ms"
    }
    更新Elastic中某条记录中的字段show,如果原来没有会新增
  • 相关阅读:
    pytest--重复执行用例 pytest-repeat
    python中查询mongo数据库
    pytest--将参数打到在报告中,ids参数
    pytest-html报告中,添加描述
    pytest-html报告
    pytest -fixture的3种用法(autouse=True)
    httprunner 创建run.py文件,执行套件或case,并生成测试报告
    pytest-使用自定义标记mark
    pytest 函数传参和fixture传参数request
    loadrunner-脚本设计
  • 原文地址:https://www.cnblogs.com/everest33Tong/p/12843117.html
Copyright © 2011-2022 走看看