ES基本概念及簡單用法

一、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端查看更多文章。


分享到:


相關文章: