一、ES部分名詞解釋
1、NRT
英文全稱為Near RrealTime。中文意思為近實時,從寫入數據到可以被搜索到之間有一個小於1s的延遲,使用ES進行搜索和數據分析可以達到秒級的速度。
注:由於ES寫入數據到可以被索引到之間有延遲,所以對於業務中包含有保存冪等性需求時,需要注意;
在寫完之後手動執行刷新操作,然後再查詢,否則會可能出現數據寫重的情況。
2、cluster
表示由多個節點組成的ES集群(常見集群種類:HA,HB,HP,具體可自行查閱資料)。集群有一個名稱,默認是elasticsearch,可以在配置文件中通過cluster.name字段手動指定,集群最小節點數可以為1個。
3、node(集群節點)
節點也有自己的名稱,默認是隨機分配的,默認情況下,節點啟動之後,會自動去尋找名稱為cluster.name字段所指定的集群。如果在默認不修改cluster.name的情況下,啟動多個節點之後,它們會自動組成一個ES集群。
4、document(文檔)
它是ES中的最小數據單元,通常使用JSON數據結構表示,每個index(索引)的type(類型)中,都可以存儲多個Document。
5、field(字段)
具體指的是Document中的某一個數據字段。比如學生信息文檔中的學號字段。
6、index(索引)
是多個有相似結構的文檔數據的集合,類似於MySQL數據庫中的數據庫概念。
7、type(類型)
表示某個索引下面的某種相同數據結構的結合。在較低版本的ES中,一個索引中可以有多個type,高版本中一個索引下只能有一個類型,官方建議每個索引下最好只有一個type。如果一個index下有多個type,在不同的搜索場景下可能會相互有影響,比如:一個索引下面有一個用於統計分析的type和一個用於搜索的type,如果統計請求比較慢,有可能會阻塞到查詢請求。
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臺服務器。
二、ES的文檔數據格式的優點
1.可以提供複雜的面向對象的數據結構;
2.如果不適用ES,使用傳統的關係型數據庫,複雜的對象只能拍平,放到多個關聯表中,查詢的時候需要查詢多個表,而且還得重新組合成複雜對象,特別麻煩;
3.基於ES面向文檔的特性,而且提供了倒排索引,所以可以勝任複雜的查詢和檢索需求;
4.使用傳統,流行的文檔對象來存儲,很容易處理;
三、ES集群簡單管理
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
…結果略
#默認展示的是系統索引和自己創建的索引,參數v表示查看詳細信息;
_cat還有其他api,但是不是很常用,如果需要,可以通過如下命令查看即可
[root@es-master ~]# curl http://localhost:9200/_cat
/_cat/allocation
/_cat/shards
/_cat/nodes
/_cat/tasks
…其他輸出結果略.
四、ES簡單操作
此處以電商系統商品搜索為例,使用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、修改
方法一:替換,通過ID替換,如果文檔存在,則直接覆蓋
用法:
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" ] }
注意:
替換某個文檔時,需要帶著文檔中的所有字段,否則未帶著的字段會丟失,切記!!!
方法二:通過ID更新部分字段
用法:
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
注:文章為作者原創,轉載請標註出處:https://www.jinnianshizhunian.vip
手機端顯示格式的問題,好多文章發佈之後拍板會混亂,如果需要,可以複製上述作者網址,在PC端查看更多文章。