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返回时,它将为每个操作提供状态(按照发送的顺序),以便检查某个特定操作是否失败。

猜你喜欢

转载自blog.csdn.net/sunjian1122/article/details/83621236