接着上一篇ElasticSearch搭建的環境繼續學習,從概念開始,本篇文章將介紹ElasticSearch中的一些重要概念及部分原理性概念,如下內容中簡稱爲ES。
1.NRT:英文全稱爲Near RrealTime。中文意思爲近實時,從寫入數據到能夠被搜索到之間有一個小於1s的延遲,使用ES進行搜索和數據分析能夠達到秒級的速度。node
注:因爲ES寫入數據到能夠被索引到之間有延遲,因此對於業務中包含有保存冪等性需求時,須要注意; 在寫完以後手動執行刷新操做,而後再查詢,不然會可能出現數據寫重的狀況。
2.cluster:表示由多個節點組成的ES集羣(常見集羣種類:HA,HB,HP,具體可自行查閱資料)。集羣有一個名稱,默認是elasticsearch,能夠在配置文件中經過cluster.name字段手動指定,集羣最小節點數能夠爲1個。數據庫
3.node:集羣中的節點。節點也有本身的名稱,默認是隨機分配的,默認狀況下,節點啓動以後,會自動去尋找名稱爲cluster.name字段所指定的集羣。若是在默認不修改cluster.name的狀況下,啓動多個節點以後,它們會自動組成一個ES集羣。api
4.document:文檔。它是ES中的最小數據單元,一般使用JSON數據結構表示,每一個index(索引)的type(類型)中,均可以存儲多個Document。服務器
5.field:表示字段,具體指的是Document中的某一個數據字段。好比學生信息文檔中的學號字段。數據結構
6.index:索引。是多個有類似結構的文檔數據的集合,相似於MySQL數據庫中的數據庫概念。curl
7.type:類型。表示某個索引下面的某種相同數據結構的結合。在較低版本的ES中,一個索引中能夠有多個type,高版本中一個索引下只能有一個類型,官方建議每一個索引下最好只有一個type。若是一個index下有多個type,在不一樣的搜索場景下可能會相互有影響,好比:一個索引下面有一個用於統計分析的type和一個用於搜索的type,若是統計請求比較慢,有可能會阻塞到查詢請求。elasticsearch
8.shard:每一個index會被拆分爲多個shard,每一個shard就會存放這個index的一部分數據,這此shard會散落在多臺服務器上。有了shard就能夠進行橫向擴展,存儲更多數據,讓搜索和分析等操做分佈到多臺服務器上去執行,提高吞吐量和性能。shard又分爲replica shard和primary shard,每一個shard都是一個lucene index.性能
9.replica:每一個服務器隨時可能故障或宕機,此時shard就能夠會丟失,所以能夠爲每個shard建立多個replica副本。replica能夠在shard故障時提供備用服務。保證數據不丟失或者丟失不多,多個replica還能夠提高搜索操做的吞吐量和性能。學習
注意: primary shard:創建索引時一次設置,不能修改,默認5個; replica shard:可隨時修改,默認1個),默認每一個索引10個shard,5個primary shard, 5個replica shard,最小的高可用配置,是2臺服務器。
1.能夠提供複雜的面向對象的數據結構;
2.若是不適用ES,使用傳統的關係型數據庫,複雜的對象只能拍平,放到多個關聯表中,查詢的時候須要查詢多個表,並且還得從新組合成複雜對象,特別麻煩;
3.基於ES面向文檔的特性,並且提供了倒排索引,因此能夠勝任複雜的查詢和檢索需求;
4.使用傳統,流行的文檔對象來存儲,很容易處理;ui
1.集羣健康狀態
使用_cat相關api查看,以下:
[root@es-master ~]# curl http://localhost:9200/_cat/health?pretty #返回結果 1549092107 02:21:47 elasticsearch green 3 3 134 67 0 0 0 0 - 100.0%
能夠看出,若是集羣中的全部節點都正常啓動,整個集羣的狀態爲green;
2.集羣的三種狀態
(1)紅(red):不是全部的primary shard都是active狀態的,部分索引有數據丟失了; (2)黃(yellow):每一個索引的primary shard都是active狀態的,可是部分replica shard不是active狀態,處於不可用的狀態,此時能夠繼續使用; (3)綠(green):每一個索引的primary shard和replica shard都是active狀態的;
集羣啓動時狀態變化過程:
集羣啓動的時候,首先會有某些節點先啓動,這些節點會被做爲主節點,在全部的主節點未徹底啓動以前,集羣此時處於red狀態; 當主節點所有啓動以後,集羣狀態會變爲yellow狀態; 全部的replica節點都啓動完成以後,集羣中的全部節點都已經齊全,此時集羣變爲green狀態;
3._cat中的重要api
[root@es-master ~]# curl http://localhost:9200/_cat/nodes?pretty 192.168.199.12 29 95 12 0.00 0.08 0.06 mdi * es-node2 192.168.199.11 41 88 25 0.64 0.75 0.57 mdi - es-node1 192.168.199.11 20 88 25 0.64 0.75 0.57 mdi - es-node3
表示集羣中有三個節點,es-node1,es-node2,es-node3;
[root@es-master ~]# curl http://localhost:9200/_cat/shards?pretty student_index 3 p STARTED 1 4.3kb 192.168.199.11 es-node1 student_index 3 r STARTED 1 4.3kb 192.168.199.11 es-node3 student_index 2 p STARTED 2 8.5kb 192.168.199.12 es-node2 student_index 2 r STARTED 2 8.5kb 192.168.199.11 es-node3 student_index 1 r STARTED 1 4.4kb 192.168.199.11 es-node1 student_index 1 p STARTED 1 4.4kb 192.168.199.12 es-node2 student_index 4 p STARTED 1 4.4kb 192.168.199.11 es-node1 student_index 4 r STARTED 1 4.4kb 192.168.199.11 es-node3 student_index 0 p STARTED 0 261b 192.168.199.12 es-node2 student_index 0 r STARTED 0 261b 192.168.199.11 es-node3
表示student_index索引默認有10個分片,5個primary和5個replica;
[root@es-master ~]# curl http://localhost:9200/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .monitoring-es-6-2019.01.27 kXMATwLHShGoGrAhOVPZqg 1 1 39439 432 48.3mb 24.1mb green open .monitoring-kibana-6-2019.01.27 PpgWm9PSRXKU385_pQis2g 1 1 1512 0 1mb 531.7kb green open .elastichq 19vJX4__TcunPjMCfybmdA 5 1 1 0 14kb 7kb green open student_index 8VHSS7wyQIadWBcNWJsGPQ 5 1 5 0 43.9kb 21.9kb green open student VXHrKYNcSRKELb7WSzToCw 5 1 2 0 23.8kb 11.9kb
默認展現的是系統索引和本身建立的索引,參數v表示查看詳細信息;
[root@es-master ~]# curl http://localhost:9200/_cat =^.^= /_cat/allocation /_cat/shards /_cat/nodes /_cat/tasks ...
此處以電商系統商品搜索爲例,使用kibana圖形化操做界面,介紹ES的簡單操做。
1.建立
用法:
PUT /index_name/type_name/id {}
例如:建立一個索引名稱爲shop_index,類型爲productInfo,id爲1的索引
PUT /shop_index/productInfo/1 { "name": "HuaWei Mate8", "desc": "Cheap and easy to use", "price": 2500, "producer": "HuaWei Producer", "tags": [ "Cheap", "Fast" ] }
2.查詢
用法:
GET /index_name/type_name/id
例如:查詢id爲1的商品信息
GET /shop_index/productInfo/1 { "_index": "shop_index", "_type": "productInfo", "_id": "1", "_version": 1, "found": true, "_source": { "name": "HuaWei Mate8", "desc": "Cheap and easy to use", "price": 2500, "producer": "HuaWei Producer", "tags": [ "Cheap", "Fast" ] } }
3.修改
用法:
PUT /index_name/type_name/id {}
例如:將商品價格修改成2400
PUT /shop_index/productInfo/1 { "name": "HuaWei Mate8", "desc": "Cheap and easy to use", "price": 2400, "producer": "HuaWei Producer", "tags": [ "Cheap", "Fast" ] }
注意:替換某個文檔時,須要帶着文檔中的全部字段,不然未帶着的字段會丟失,切記!!!
用法:
POST /index_name/type_name/id/_update {}
例如:將上述商品的價格改成2200
POST /shop_index/productInfo/1/_update { "doc": { "price": 2200 } }
4.刪除
用法:
DELETE /index_index/type_index/id
例如:刪除id爲1的商品記錄:
DELETE /shop_index/productInfo/1
本篇文章簡單介紹了ES的一些重要概念及基本用法,爲後續內容作鋪墊,下篇文章將繼續ES的多種搜索方式!歡迎評論轉發!
後續文章將更新在我的小站上,歡迎查看。