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