ElasticSearch重要概念及簡單用法

接着上一篇ElasticSearch搭建的環境繼續學習,從概念開始,本篇文章將介紹ElasticSearch中的一些重要概念及部分原理性概念,以下內容中簡稱爲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
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表示查看詳細信息;

  • _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

本篇文章簡單介紹了ES的一些重要概念及基本用法,爲後續內容做鋪墊,下篇文章將繼續ES的多種搜索方式!歡迎評論轉發!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章