前面向讀者介紹了Elasticsearch的安裝和基本配置,同時也向讀者介紹了Elasticsearch中的核心概念,相信讀者對Elasticsearch的使用已經有了一個初步的瞭解,接下來,向讀者介紹Elasticsearch中的REST命令,這是Elasticsearch提供的一整套強大的REST命令,來實現對集羣的操作。接下來向讀者詳細介紹這個東西。
本文是Elasticsearch系列的第二篇,閱讀前面的文章,有助於更好的理解本文:
REST接口
當節點和集羣啓動後,下一步就是要考慮如何與節點和集羣進行通信,幸運的是,Elasticsearch提供了一個非常全面和強大的REST API,開發者利用這個REST API,可以實現與集羣之間的交互。這一套REST API主要提供瞭如下幾個功能:
- 檢查集羣、節點和索引的健康信息、狀態以及各種統計信息
- 管理集羣、節點、索引數據以及元數據
- 對索引進行 CRUD(創建、讀取、更新和刪除)和搜索操作
- 執行高級的搜索操作, 例如分頁、排序、過濾、腳本編寫(scripting)、聚合(aggregations)以及其它操作
上面向讀者介紹了Elasticsearch提供的REST API所具有的基本功能,接下來,我們就來看看這些基本功能具體如何操作。
集羣操作
由於是REST API,讀者可以使用POST MAN,RESTClient等工具完成下面的測試,也可以直接使用curl命令來完成下面的測試。對於一些簡單的如GET請求,也可以直接在瀏覽器中完成測試。
集羣健康信息
使用如下命令可以查看集羣健康信息:
curl -X GET "localhost:9200/_cat/health?v"
查看結果如下:
從這個響應中,我們可以看到集羣的名稱,狀態,節點數,分片數等等,其中:
- 狀態有green、yellow和red三種,green表示目前集羣運行一切OK,集羣功能齊全;yellow表示集羣所有數據都是可用的,集羣功能也齊全,不過某些複製沒有被分配;red則表示集羣的部分數據不可用,集羣的功能也是不全的,但是集羣還是可以運行的,它可以繼續處理搜索請求,不過開發者要儘快修復它。
- 另外從響應結果中,我們可以看到一共有一個節點,一個分片等信息。
- 因爲我之前已經安裝了Kibana,所以這裏的信息實際上反應了Kibana的部分信息,讀者如果沒有安裝Kibana,這裏的響應結果和我的可能有差異,不過參數含義都是一致的,關於Kibana,我們在後文會向讀者介紹。
通過如下請求可以查看節點的詳細信息:
curl -X GET "localhost:9200/_cat/nodes?v"
請求結果如下:
可以看到,我們的節點名爲iFO7DC9
查看所有索引
通過如下命令可以查看所有索引:
curl -X GET "localhost:9200/_cat/indices?v"
請求結果如下:
從圖中可以看到集羣中索引的信息。
創建一個索引
接下來,通過如下命令,我們可以創建一個名爲customer的索引,並重新列出所有索引:
curl -X PUT "localhost:9200/customer?pretty"
curl -X GET "localhost:9200/_cat/indices?v"
執行結果如下:
請求命令解釋:
- 第一個,通過一個PUT請求,添加了一個名爲customer的索引,末尾加上pretty參數,表示請求響應的JSON格式化之後打印出來,方便開發者閱讀。這是一個通用的參數,當需要格式化響應JSON時,都可以使用這個參數。
- 第二個請求表示查看所有的索引,其中就有我們剛剛創建的索引customer,該索引有5個分片1個複製,沒有文檔,但是注意該索引的status爲yellow,根據前文的介紹,黃色表示某些複製沒有被分配。這是因爲elasticsearch默認爲索引創建一份複製,而現在只有一個節點在運行,因此複製就分配不了了,當另外一個節點加入到這個集羣后才能分配,分配成功後,這個節點的健康狀態就會變成綠色。
查詢文檔
通過如下請求可以添加一個文檔:
curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{
"name": "John Doe"
}'
這個請求表示在customer中的_doc類型中添加一個文檔,文檔id爲1,該命令執行結果如下:
小貼士:
Elasticsearch中,並不強制要求顯式的創建索引,即前面案例中,如果開發者在添加文檔之前,還沒有創建customer索引,那麼該文檔一樣也會創建成功的(此時索引會被自動創建)。
通過如下命令可以獲取一個文檔,最後面的1表示獲取id爲1的文檔:
curl -X GET "localhost:9200/customer/_doc/1?pretty"
刪除索引
通過如下命令可以刪除一個索引:
curl -X DELETE "localhost:9200/customer?pretty"
curl -X GET "localhost:9200/_cat/indices?v"
DELETE請求可以用來刪除一個索引,該命令執行結果如下:
可以看到,customer索引已經被成功刪除了。
小結
這裏向讀者介紹的索引操作都是很常規,很簡單的操作,後面會向讀者介紹複雜的索引操作。
另外,讀者總結上面的REST API格式,可以發現,API格式爲:
curl -X <HTTP Verb> /<Index>/<Type>/<ID>
事實上,這個格式適用於所有的API,如果能記住它,對我們後面的學習會有很大的幫助。
好了,本文就先介紹到這裏,有問題歡迎留言討論。