上一篇,我們介紹了什么是 Elasticsearch茎活,它能做什么用以及基本概念(索引 Index、文檔 Document琢唾、類型 Type)理解载荔。這篇主要對(duì)文檔的基本 CRUD 以及如何批量操作講解。下面讓我們進(jìn)入正題采桃。
一懒熙、文檔的 CRUE
Create 文檔
支持自動(dòng)生成文檔 Id 和指定文檔 Id 兩種方法
#create document. 自動(dòng)生成 Id
POST songs/_doc
{
"name":"說好不哭",
"author":"周杰倫",
"price":3
}
#create document. 指定Id丘损。如果 Id 已經(jīng)存在,報(bào)錯(cuò)
PUT songs/_create/1
{
"name":"說好不哭",
"author":"周杰倫",
"price":3
}
Get 文檔
#找到文檔
Get songs/_doc/1
result:
{
"_index" : "songs",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "說好不哭",
"author" : "周杰倫",
"price" : 3
}
}
- 找到文檔,返回 HTTP 200
- 文檔元信息
- _index/_type/,_type 在版本7中只有 _doc 類型
- _version 版本信息,同一個(gè) Id 的文檔被刪除了颂鸿,版本號(hào)也會(huì)增加
- _source 中默認(rèn)包含文檔的原始信息
- 文檔元信息
- 找不到记餐,返回 HTTP 404
Index 文檔
Index 也是用于創(chuàng)建文檔的方法,和 Create 不同有一些不同耸三,如果文檔不存在情況,直接創(chuàng)建新文檔,否則刪除原來的文檔而钞,新文檔被索引,_version 版本加一拘荡。
PUT songs/_doc/1
{
"name":"說好不哭",
"author":"周杰倫",
"price":0
}
result:
{
"_index" : "songs",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,//+1
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
Update 文檔
- Update 不會(huì)刪除原來文檔臼节,而是實(shí)現(xiàn)真正更新
- Post 方法和 Payload 需要包含在 "doc" 中
#在原文檔上增加字段
POST songs/_update/1
{
"doc":{
"update" : "2019-05-15T14:12:12"
}
}
GET songs/_doc/1
{
"_index" : "songs",
"_type" : "_doc",
"_id" : "1",
"_version" : 3,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "說好不哭",
"author" : "周杰倫",
"price" : 0,
"update" : "2019-05-15T14:12:12"
}
}
Delete 文檔
#Delete by Id
#刪除文檔
DELETE users/_doc/1
Bulk 批量操作
- Bulk 支持在一次調(diào)用中,對(duì)不同索引進(jìn)行操作
- 支持 Index珊皿、Create网缝、Update、Delete 類型操作
- 單條錯(cuò)誤不影響其他操作進(jìn)行
- 每一條操作都會(huì)有對(duì)應(yīng)的執(zhí)行的結(jié)果顯示
POST _bulk
{ "index" : { "_index" : "test1", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test1", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field3" : "value3" }
{ "update" : { "_index" : "test1","_id" : "1"} }
{ "doc" : {"field2" : "value2"} }
mget 批量讀取
顧名思義就是可以對(duì)不同索引的文檔進(jìn)行批量讀取蟋定,只需要提供索引名稱和 Id 就可以在一次 API 中全部讀取粉臊,減少網(wǎng)絡(luò)開銷。
GET /test1/_mget
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2"
}
]
}
msearch 批量查詢
同樣 ES 也提供了 msearch 對(duì)不同索引進(jìn)行批量查詢溢吻。
# msearch 操作
POST kibana_sample_data_ecommerce/_msearch
{}
{"query" : {"match_all" : {}},"size":1}
{"index" : "kibana_sample_data_flights"}
{"query" : {"match_all" : {}},"size":2}
注:kibana_sample_data_ecommerce 可以在 kibana 的樣例數(shù)據(jù)维费,需要手動(dòng)點(diǎn)擊添加。
本篇主要對(duì)文檔的 CRUD 以及批量操作 API 進(jìn)行講解促王。在這里提一點(diǎn)犀盟,批量操作可以幫助我們提高對(duì) API 調(diào)用性能,但如果一次提交過多數(shù)據(jù)蝇狼,也是有可能會(huì)導(dǎo)致 ES 過大的壓力阅畴,反而造成性能下降。
系列文章