ElasticSearch重要概念及簡單用法

接着上一篇ElasticSearch搭建的環境繼續學習,從概念開始,本篇文章將介紹ElasticSearch中的一些重要概念及部分原理性概念,如下內容中簡稱爲ES。

1、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臺服務器。

2、ES的文檔數據格式的優勢

1.能夠提供複雜的面向對象的數據結構;
2.若是不適用ES,使用傳統的關係型數據庫,複雜的對象只能拍平,放到多個關聯表中,查詢的時候須要查詢多個表,並且還得從新組合成複雜對象,特別麻煩;
3.基於ES面向文檔的特性,並且提供了倒排索引,因此能夠勝任複雜的查詢和檢索需求;
4.使用傳統,流行的文檔對象來存儲,很容易處理;ui

3、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
...

4、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的多種搜索方式!歡迎評論轉發!

後續文章將更新在我的小站上,歡迎查看。

相關文章
相關標籤/搜索