1. 程式人生 > >Elasticsearch入門三:Elasticsearch基本用法-增刪改查(譯)

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返回時,它將為每個操作提供狀態(按照發送的順序),以便檢查某個特定操作是否失敗。