Elasticsearch入門三:Elasticsearch基本用法-增刪改查(譯)
title: Elasticsearch入門三:Elasticsearch基本用法-增刪改查(譯)
date: 2018-11-01 11:00:00
tags: Elasticsearch
原文地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/_exploring_your_cluster.html
之前我們已經將叢集執行起來了,下一步是學習怎麼與它們溝通。而Elasticsearch正好提供了一個非常全面和強大的REST API文件,用來與叢集互動。API實現的幾個功能點如下:
-
檢查您的叢集、節點和索引健康狀況、狀態和統計資訊
-
管理叢集、節點、索引資料和元資料
-
索引的增刪改查及搜尋操作
-
高階的搜尋功能,比如分頁、排序、過濾、指令碼編制、聚合等等
一.檢查叢集的健康狀況
1.檢視叢集健康
為了檢查叢集的健康狀況,我們使用_cat
API。
GET /_cat/health?v
響應如下:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1541039656 10:34:16 search yellow 3 1 6 6 0 0 6 0 - 50.0%
主要關注如下幾個引數:
cluster:叢集名稱,預設名稱為elasticsearch,由於elasticsearch預設使用單播網路發現,在同一個機器上的其他節點只要叢集名稱相同,就當做同一個叢集。
status:健康狀況,分為下面三種狀態:
green - 一切都很好(叢集功能齊全)
yellow - 所有資料都可用,但有些副本尚未分配(叢集功能齊全)
red - 有些資料由於某些問題不可用(叢集只有部分功能)注意:當叢集是紅色時,它將繼續為可用碎片的搜尋請求提供服務,但是您可能需要儘快修復它,因為存在未分配的碎片
2.檢視節點
使用以下命令檢視叢集的節點列表:
GET /_cat/nodes?v
響應如下:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.2.36 99 94 11 0.77 0.41 0.35 mdi * node-1
192.168.2.36 24 94 11 0.77 0.41 0.35 mi - node-2
192.168.2.36 23 94 11 0.77 0.41 0.35 mi - node-3
3.檢視索引
GET /_cat/indices?v
響應如下:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana nujGq_auS-u2KZRbS7LoUw 1 1 2 0 10.8kb 10.8kb
yellow open event_search lG2RcdO-Q6Wtd5oup-2CCQ 5 1 16107987 0 11.4gb 11.4gb
主要引數的意思:
health:健康狀況,分別為green、yellow和red
index:索引名
uuid:唯一標識
pri:主碎片
rep:副本
二.索引的增刪改查
1.建立索引
現在,我們建立一個名為“customer”的索引,然後再次列出所有索引:
#使用PUT建立名為“customer”的索引,pretty表示格式化顯示json結果
PUT /customer?pretty
GET /_cat/indices?v
2.新增或更新文件
2.1.指定ID新增或替換文件
現在我們在customer索引中新增一些內容。我們將把一個簡單的文件索引到customer索引中,ID為1,如下所示:
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
},
"created": true
}
從上面可以看到,在customer索引中成功建立了一個新的id為1的customer文件。
需要注意的是,Elasticsearch並沒有強制要求我們在建立文件時建立索引,建立文件時若對應的索引不存在,將自動建立該索引。
若ID存在則替換原來的文件,不存在則新增
2.2.自生成ID新增文件
這個例子展示瞭如何在沒有顯式ID的情況下對文件進行索引,只是用POST代替了PUT呼叫方式:
POST /customer/_doc?pretty
{
"name": "Jane Doe"
}
2.3.更新文件
除了能夠索引和替換文件之外,我們還可以更新文件。不過請注意,Elasticsearch實際上並不會在引擎蓋下進行就地更新。每當我們執行更新時,Elasticsearch就會刪除舊文件,然後新增新文件。
這個例子展示瞭如何通過將name欄位更改為“Jane Doe”來更新我們以前的文件(ID為1):
POST /customer/_doc/1/_update?pretty
{
"doc": { "name": "Jane Doe" }
}
3.搜尋文件
接下來可以搜尋剛才建立的文件:
GET /customer/doc/1?pretty
響應如下:
{
"_index": "customer",
"_type": "doc",
"_id": "1",
"_version": 1,
"found": true,
-"_source": {
"name": "John Doe"
}
}
"found": true
表示找到了對應的文件,文件的具體內容見_source
裡面的內容。
4.刪除索引與文件
4.1.刪除索引
將建立的索引刪除:
DELETE /customer?pretty
4.2.刪除文件
刪除文件相當簡單。這個例子展示瞭如何刪除customer索引下對應ID為2的文件:
DELETE /customer/_doc/2?pretty
三.批量處理
除了能夠索引、更新和刪除單個文件之外,Elasticsearch還可以使用_bulk
API批量執行上述任何操作。它提供了一種非常有效的機制,可以在儘可能少的網路往返的情況下儘可能快地執行多個操作,提高執行效率。
下面的示例就是在一個批量操作中索引兩個文件:
POST /customer/doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
這個批量操作更新第一個文件(ID為1),然後刪除第二個文件(ID為2):
POST /customer/_doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
響應如下:
{
"took": 48,
"errors": false,
"items": [
{
-"update": {
"_index": "customer",
"_type": "doc",
"_id": "1",
"_version": 3,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"status": 200
}
}
]
}
值得注意的是,批量操作不會因為其中的一個操作失敗所有的都失敗。當bulk API返回時,它將為每個操作提供狀態(按照發送的順序),以便檢查某個特定操作是否失敗。