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