创建一个文档

文档的Type名都约定为_doc

自动生成文档id

使用POST方法

post users/_doc
{
	"firstName": "Jack",
	"lastName": "Johhson",
	"tags": ["guitar", "skateboard"]
}

指定文档id

使用PUT方法。

put users/_create/1
{
	"firstName": "Jack",
	"lastName": "Johnson",
	"tags": ["guitar", "skateboard"]
}

如果id已经存在则会创建失败。

找到一个文档

通过GET方法根据id找到一个文档。找到文档返回200,找不到返回404. 返回的数据中包括文档的数据和文档的元信息。

get users/_doc/1
 
{
	"_index": "users",
	"_type": "_doc",
	"_id": "1",
	"_version": 32,
	"_seq_no": 36,
	"_primary_term": 1,
	"found": true,
	"_source": {
		"firstName": "Jack",
		"lastName": "Johnson",
		"age":39,
		"tags": [
			"guitar",
			"skateboard"
		]
	}
}

Index文档

与创建不同的是:如果文档不存在,则创建新文档;如果存在,那么现有文档会被删除,然后创建新的文档,同时将版本信息+1。

会覆盖旧文档

put users/_doc/1
{
	"tags": ["guitar","skateboard","reading"]
}

如果存在id为1的文档,那么就会被新的文档覆盖,然后_version的值加1。

更新文档

与Index文档不同,不会删除原来的文档,而是实现真正的数据更新。 使用POST方法,更新的数据要包含在”doc”中。

POST users/_update/1
{
	"doc": {
		"albums": ["Albums1", "Albums2"]
	}
}

批量更新

每次请求建立需要耗费资源,使用批量操作可以一次执行多个操作。 其API如下:

POST _bulk

单个操作失败并不会影响其它操作。返回结果包括了每一条操作的结果。

批量读取

mget

可以一次从多个索引读取多个文档 示例如下:

GET /_mget
{
	"docs": [
		{
			"_index": "test",
			"_id": "1"
		},
		{
			"_index": "test",
			"_id": "2"
		}
	]
}

msearch

同样可以从不同的索引读批量读取文档。 示例如下:

POST kibana_sample_data_ecommerce/_msearch
{}
{"query":{"match_all":{}},"size":1}}
{"index": "kibana_sample_data_flights"}
{"query": {"match_all":{}}, "size":2}}