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" } } //新版寫法:http://www.rzrgm.cn/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,如果原來沒有會新增
浙公網安備 33010602011771號