[TOC] 2、安裝(略) 預設情況下,elasticsearch 使用埠 9200 來訪問它的 REST API。如果有必要,該埠也可以配置 3、探索集群 3.1 The REST API 既然我們已經啟動並且運行了我們的節點(和集群),下一步是去瞭解如何與它通信。幸運的是,elasticse ...
2、安裝(略)
預設情況下,elasticsearch 使用埠 9200 來訪問它的 REST API。如果有必要,該埠也可以配置
3、探索集群
3.1 The REST API
既然我們已經啟動並且運行了我們的節點(和集群),下一步是去瞭解如何與它通信。幸運的是,elasticsearch 提供了一個非常全面且強大的 REST API,您可以使用它來與集群進行交互。可以使用 API 來完成如下的幾件事情 :
- 檢查集群,節點,和索引的健康,狀態和統計信息。
- 管理集群,節點和索引數據以及元數據。
- 針對索引執行 CRUD(Create,Read,Update,和 Delete)和搜索操作。
- 執行高級搜索,例如 paging,sorting,filtering,scripting,aggregations 等等。
3.2. Cluster Health(集群健康)
讓我們從基本的健康檢查開始,我們可以用它來看看我們的集群在做什麼。我們將使用 curl 來做這件事情,當然您也可以使用任何允許您進行 HTTP/REST 調用的工具。假設我們在同一節點上啟動了 elasticsearch 並且打開了另一個命令 shell 視窗。 為了檢查集群健康,我們將使用 _cat API。您可以在 Kibana的控制臺中通過點擊 “VIEW IN CONSOLE” 或者通過點擊下麵的 “COPY AS CURL” 鏈接然後粘貼到終端中使用 curl 中運行該命令 :
#shell視窗
curl -XGET 'localhost:9200/_cat/health?v&pretty'
#kibana中
GET /_cat/indices?v
響應如下 :
epoch timestamp cluster status node.total node.data shards pri relo init
1475247709 17:01:49 elasticsearch green 1 1 0 0 0 0
unassign pending_tasks max_task_wait_time active_shards_percent
0 0 - 100%
我們可以看到名為 “elasticsearch” 的集群處於綠色狀態。
每當我們請求集群健康時,我們得到的集群狀態分為綠色、黃色,和紅色。
- 綠色表示一切正常(集群功能齊全)
- 黃色表示所有數據可用,但是有些副本尚未分配(集群功能齊全)
- 紅色意味著由於某些原因有些數據不可用(可以使用集群的部分功能)
註意,集群是紅色時,它仍然具有部分功能(例如,它將繼續從可用的分片中提供搜索服務),但是您應該儘快去修複它,因為您已經丟失數據了。
另外,從上面的響應中,我們可以看到共計 1 個 node(節點)和 0 個 shard(分片),因為我們還沒有在其中放入數據。請註意,由於我們使用的是預設的集群名稱(elasticsearch),並且 elasticsearch 預設情況下使用單播網路來發現同一機器上的其它節點。有可能您不小心在您的電腦上啟動了多個節點,預設情況下它們都會加入該群集。在這種情況下,你會在上面的響應中看到多個節點。
我們也可以獲取集群的節點列表,如下所示 :
curl -XGET 'localhost:9200/_cat/nodes?v'
#kibana中
GET /_cat/nodes?v
響應如下 :
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 10 5 5 4.46 mdi * PB2SGZY
在這裡,我們可以到命名為 “PB2SGZY ” 的節點名,這是目前在我們集群中的唯一節點。
3.3 List All Indices(查看所有索引)
現在,讓我們來查看下所有的索引 :
curl -XGET 'localhost:9200/_cat/indices?v'
GET /_cat/indices?v
響應如下 :
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
沒有具體的值,這意味著elasticsearch集群中還沒有索引。
3.4 Create an Index(創建索引)
現在我們創建一個名為 “customer” 的索引,然後再列出所有索引 :
curl -XPUT 'localhost:9200/customer?pretty&pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
#kibana中
PUT /customer?pretty
GET /_cat/indices?v
這是第一個使用PUT
動作命令創建名為 customer
的索引。只需在調用的末尾附加pretty
命令就可以可視化地列印JSON響應(如果有的話)
響應如下 :
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open customer 95SQ4 5 1 0 0 260b 260b
第二個命令的結果告訴我們現在已經有 1 個名為customer
的索引,並且它有 5 個主分片和 1 個副本(預設值)以及0個文檔。
您可能也註意到customer
索引中有一個yellow
健康標記。回想下我們先前的討論, yellow 意味著有些副本還沒有被分配。該索引發生這種情況的原因,是因為預設情況下elasticsearch為此索引創建了一個副本。因為目前只有一個節點在運行,所以在另一個節點加入集群之前,還不能分配一個副本(為了高可用性)。一旦該副本分配到第二個節點上,該索引的運行狀況將變為綠色。
3.5 索引和查詢文檔
現在讓我們放入一些東西動我們的 customer 索引中去。讓我們在 customer 索引中index一個ID為1的客戶文檔,如下所示:
curl -XPUT 'localhost:9200/customer/_doc/1?pretty&pretty' -d'
{
"name": "John Doe"
}'
PUT /customer/_doc/1?pretty
{
"name":"John Doe"
}
響應如下 :
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
從上面我們可以看到在客戶索引中成功地創建了一個新的客戶文檔。該文檔還有一個為1的內部 ID,它是我們在索引時指定的。
需要註意的是,您無需在索引文檔之前先顯式地創建索引。在前面的例子中,如果customer 索引事先不存在,Elasticsearch 將自動的創建 customer 索引。
現在讓我們檢索我們剛剛索引的文檔 :
curl -XGET 'localhost:9200/customer/_doc/1?pretty&pretty'
GET /customer/_doc/1?pretty
響應如下 :
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 25,
"_primary_term" : 1,
"found" : true,
"_source" : { "name": "John Doe" }
}
除了一個欄位found
之外,上面沒有什麼特別的東西。結果說明我們找到了一個ID為1的文檔,其中欄位_source
返回了我們從上一步索引的完整JSON文檔。
3.6 Delete an Index(刪除索引)
現在讓我們刪除剛纔創建的索引並且再次列出所有索引 :
curl -XDELETE 'localhost:9200/customer?pretty&pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
DELETE /customer?pretty
GET /_cat/indices?v
響應如下 :
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
這意味著索引被成功的刪除,並且我們現在又回到了集群沒有索引的初始狀態了。
在我們繼續之前,讓我們仔細的看一看一些我們迄今為止學習的 API 命令 :
PUT /customer
PUT /customer/_doc/1
{
"name": "John Doe"
}
GET /customer/_doc/1
DELETE /customer
如果我們仔細的研究上面的命令,我們可以清楚的看到,我們如何訪問 Elasticsearch 中的數據的 pattern(模式)。該 pattern(模式)可以概括如下 :
<HTTP Verb> /<Index>/<Type>/<ID>
這種REST訪問模式在所有API命令中都是非常普遍的,如果您可以簡單的記住它,對您掌握 Elasticsearch 會有一個良好的開端。