标签列表

everest33

自制力

导航

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,如果原来没有会新增

posted on 2020-05-07 15:00  everest33  阅读(251)  评论(0编辑  收藏  举报