ElasticSearch入門 官方文件翻譯 - 2.Exploring Your Cluster
叢集探索
REST API
現在,我們的節點(叢集)已經跑起來了,下一步想著怎麼跟它溝通。幸運的是,ES提供了廣泛且強大的REST API用於與叢集互動。下面是利用這個API,可以做的幾件事情:
- 檢查你的叢集、節點和索引的健康狀態和各種統計資訊
- 管理你的叢集、節點、索引資料和後設資料
- 對你的索引進行CRUD(建立、讀取、更新和刪除)和搜尋操作
- 執行高階的查詢操作,像是分頁、排序、過濾、指令碼編寫(scripting)、聚合(aggregations)和許多其它操作
叢集健康
讓我們從一個基礎的健康檢查開始,檢視我們的叢集是怎麼工作的。我們使用CURL來幹這事,當然,你也可以用其他可以發起HTTP/REST請求的工具。首先,假設我們在啟動ES的同一個節點上,然後開啟另一個SHELL視窗。
我們用_cat API來作叢集健康檢查。
curl -XGET 'localhost:9200/_cat/health?v&pretty'
響應為:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1475247709 17:01:49 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
可以看到,我們名稱為elasticsearch
的叢集是啟動的,綠色狀態。
當我們詢問叢集狀態的時候,我們要麼得到綠色、黃色或紅色。綠色代表一切正常(叢集功能齊全),黃色意味著所有的資料都是可用的,但是某些複製沒有被分配(叢集功能齊全),紅色則代表因為某些原因,某些資料不可用。注意,即使是叢集狀態是紅色的,叢集仍然是部分可用的(它仍然會利用可用的分片來響應搜尋請求),但是可能你需要儘快修復它,因為你有丟失的資料。
也是從上面的響應中,我們可以看到,一共有一個節點,由於裡面沒有資料,我們有0個分片。注意,由於我們使用預設的叢集名字(elasticsearch),並且由於ES預設使用網路單播發現同臺機器上的其它節點,如果你在你的網路中啟動了多個節點,你就已經把她們加入到一個叢集中了。在這種情形下,你可能在上面的響應中看到多個節點。
用以下命令可以獲取叢集中的節點列表:
curl -XGET 'localhost:9200/_cat/nodes?v&pretty'
響應為:
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
的節點,是叢集中唯一的一個節點。
檢視所有的索引
讓我們看看現在有什麼索引:
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
響應是:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
這代表叢集中目前還沒有索引。
建立索引
現在,我們建立一個名為customer
的索引,然後再次獲取所有的索引:
curl -XPUT 'localhost:9200/customer?pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
第一個命令使用PUT
動詞建立了名為customer
的索引。我們簡單地將pretty附加到呼叫的尾部,使其以美觀的形式列印出JSON響應(如果有的話)。
響應如下:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open customer 95SQ4TSUT7mWBT7VNHH67A 5 1 0 0 260b 260b
第二個命令的結果告訴我們,我們現在有一個名為customer
的索引,它有5個主分片和1個複製(預設),其中包括0個文件。
你也許發現了,customer
索引的健康度被標記為黃色了。回想我們之前討論的,黃色意味著某些複製沒有(或者還未)被分配。這個索引之所以這樣,是因為ES預設為這個索引建立一份複製。由於現在我們只有一個節點在執行,那一份複製就分配不了了(為了高可用),直到當另外一個節點加入到這個叢集后,才能分配。一旦那份複製在第二個節點上被複制,這個節點的健康狀態就會變成綠色。
索引並查詢一個文件
現在讓我們放一些東西到customer
索引中。首先要知道的是,為了索引一個文件,我們必須告訴ES這個文件要到這個索引的哪個型別下。
讓我們將一個簡單的客戶文件索引到customer
索引,external
型別中,這個文件的ID是1,操作如下:
curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"name": "John Doe"
}
'
響應為:
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : true
}
從上面的響應中,我們可以看到,一個新的客戶文件在customer
索引和external
型別中被成功建立。文件也有一個內部id 1, 這個id是我們在索引的時候指定的。
有一個關鍵點需要注意,ES在你想將文件索引到某個索引的時候,並不強制要求這個索引被顯式地建立。在前面這個例子中,如果customer
索引不存在,ES將會自動地建立這個索引。
現在,讓我們把剛剛索引的文件取出來:
curl -XGET 'localhost:9200/customer/external/1?pretty&pretty'
響應為:
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : { "name": "John Doe" }
}
除了一個叫做found
的欄位來指明我們找到了一個ID為1的文件,和另外一個欄位_source
返回我們前一步中索引的完整JSON文件之外,其它的都沒有什麼特別之處。
刪除索引
現在,讓我們刪除剛才建立的索引,然後在列出所有的索引:
curl -XDELETE 'localhost:9200/customer?pretty&pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
響應為:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
這表明我們成功地刪除了這個索引,現在我們回到了叢集中空無所有的狀態。
在更進一步之前,我們再細看一下一些我們學過的API命令:
curl -XPUT 'localhost:9200/customer?pretty'
curl -XPUT 'localhost:9200/customer/external/1?pretty' -H 'Content-Type: application/json' -d'
{
"name": "John Doe"
}
'
curl -XGET 'localhost:9200/customer/external/1?pretty'
curl -XDELETE 'localhost:9200/customer?pretty'
如果我們仔細研究以上的命令,我們可以發現訪問Elasticsearch中資料的一個模式。這個模式可以被總結為:
curl -<REST Verb> <Node>:<Port>/<Index>/<Type><ID>
這個REST訪問模式普遍適用於所有的API命令,如果你能記住它,你就會為掌握ES開一個好頭。
相關文章
- Retrofit 2 0非常簡單的入門(翻譯官方文件)
- Moya官方文件翻譯
- docker官方文件翻譯3Docker
- docker官方文件翻譯5Docker
- docker官方文件翻譯2Docker
- docker官方文件翻譯1Docker
- rabbitmq 官方文件翻譯-2MQ
- docker官方文件翻譯4Docker
- HTTPie 官方文件中文翻譯版HTTP
- BBNorm官方指導文件翻譯ORM
- Serilog文件翻譯系列(一) - 入門指南
- jepsen 官方文件的中文翻譯版本
- lxml官方入門教程(The lxml.etree Tutorial)翻譯XML
- kotlinx協程官方文件中文翻譯版本Kotlin
- ExoPlayer的使用與解析(官方文件翻譯)
- voltDB官方文件第三章翻譯
- Python 官方文件:入門教程Python
- PendingIntent 是個啥?官方文件描述的很到位。我給翻譯翻譯Intent
- logback官方文件中文翻譯第七章:FiltersFilter
- 歡迎參與 KubeVela 官方文件翻譯活動
- Detectron2-寫模型(Write Models)官方文件中文翻譯模型
- [譯]記一次Kotlin官方文件翻譯的PR(內聯類)Kotlin
- 文件翻譯器怎麼用?如何翻譯Word文件?
- RxJava常用操作符官方文件翻譯及Kotlin示例(1)RxJavaKotlin
- 別開心太早,Python 官方文件的翻譯差遠了Python
- Dapr 官方文件中文翻譯 v1.5 版本正式釋出
- ZooKeeper 官方教程[翻譯]
- [翻譯]CMAKE官方教程
- MPAndroidChart文件翻譯Android
- [翻譯] Go 語言入門Go
- 前端工程基礎知識點--Browserslist (基於官方文件翻譯)前端
- 官方翻譯 | 有關基於文件的iOS應用開發iOS
- 前端工程基礎知識點–Browserslist (基於官方文件翻譯)前端
- 有ppt文件翻譯軟體嗎?如何翻譯整篇ppt文件
- 實用的Word文件翻譯方法分享,讓Word文件快速翻譯
- 怎麼翻譯整篇Excel文件?Excel文件翻譯一招搞定Excel
- [譯] AsyncDisplayKit/Texture 官方文件(2)
- [譯] AsyncDisplayKit/Texture 官方文件(1)
- 怎麼把Excel文件翻譯成中文?Excel文件翻譯方法介紹Excel