1. 程式人生 > 實用技巧 >Elasticsearch(2):索引詳談

Elasticsearch(2):索引詳談

在上一篇部落格中,介紹了ES中的一些核心概念和ES、Kibana安裝方法。本節開始,我們從索引開始來學習ES的操作方法。

1 建立索引

建立一個索引的方法很簡單,在Kibana中執行下行請求即可建立一個名為“index1”的索引:

PUT /index1

執行結果如下所示,左側為我們輸入的請求語句,遞減三角形按鈕執行後,出現右側返回結果。

注意,如果“index1”索引名已經存在,則會報錯。acknowledgedshards_acknowledged的值僅表示在超時前索引是否建立成功及是否為每個分片建立好指定數量的副本,就算它們的值為false也不代表索引建立失敗,應該索引在超時後也可能建立完成。

另外,索引名必須符合以下規則:

  • 索引名稱中的字母必須是小寫字母

  • 不能包含\, /, *, ?, ", <, >, |, 空格, , , ,#, !中的任何一個

  • 不能以-, _, +開頭

  • 不能是.或者..

  • 不能長於255bytes

在建立索引時,可以再請求體內對別名(aliases)、對映(mappings)、settings(設定項)進行配置。

  • 別名

ES中可以為索引新增別名,一個別名可以指向到多個索引中,同時在新增別名時可以設定篩選條件,指向一個索引的部分資料,實現在關係資料庫彙總的檢視功能,這就是ES中別名的強大之處。別名可以再建立索引時新增,也可以在索引建立後進行新增,ES中提供豐富的API對別名進行管理。在本篇部落格,我們以索引為主,只是簡單說說在建立索引時如何新增別名。更多別名內容請參考

官方文件

如下所示,在建立index3索引時,我們同時為其建立alias_1和alias_2別名,其中alias_2指定篩選條件,最後通過routing引數指定分片路由。

PUT /index3 { "aliases": { "alias_1": {}, "alias_2": { "filter": { "term": { "user.id": "張三" } }, "routing": "shard-1" } } }

  • 對映

在建立索引時,我們可以在通過對映,對索引中欄位、欄位型別等等內容進行配置。例如:

PUT /index4 { "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "field1": { "type": "text" } } } }

  • 配置項

一些索引的相關配置項也可以在建立索引時指定。例如,對主分片和副本分片數量進行設定:

PUT /index2
{
  "settings": {
    "index": {
      "number_of_shards": 3,  
      "number_of_replicas": 2 
    }
  }
}

還可以寫得更加簡單一點:

PUT /my-index-000001
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

2 基本操作

2.1 檢視索引資訊

  • 檢視指定索引資訊。通過GET請求,直接指定索引名,可以檢視索引資訊,包括索引別名、對映、設定項等資訊。

更進一步的,可以同時指定多個索引名,檢視多個索引資訊。

GET /index1,index2

或者通過_all引數指定檢視所有索引資訊。

GET /_all

  • 檢視索引是否存在。 通過HEAD請求,指定索引名,可以檢視索引是否存在,如果存在,返回狀態碼200,如果不存在,返回404。

索引存在時:

索引不存在時:

  • 檢視所有索引列表。 通過下面介面,可以查詢叢集中所有索引,列出索引的健康情況、當前狀態、id佔用空間等資訊。 GET /_cat/indices?v

2.2 刪除索引

  • 關閉、開啟索引

ES中索引支援關閉和開啟操作,一個關閉的索引除了維護元資料的基本消耗外,幾乎沒有任何其他開銷,在關閉狀態下的索引禁止進行IO操作,再次開啟後可恢復正常狀態。

關閉索引:

POST /index1/_close

開啟索引:

POST /index1/_open

  • 刪除索引 通過下方介面可以刪除一個索引,如果刪除成功,將返回acknowledge:true

DELETE /index3?pretty