Document APIs官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html
Single document APIs
Index API
創建文檔,可以自定義 id。接收一個op_type
參數,其值爲create
,等同於_create
。如果文檔的 id 存在將會報錯。
PUT users/_doc/1?op_type=create
{
"user" : "Jack",
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
# 等同於下面這種形式
PUT users/_create/1
{
"user" : "Jack",
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
創建 documenet 並自動生成 id。此時的 id 將會是 "_id" : "fz10xW4B_eVh03pFF41Y",
的形式。
POST users/_doc
{
"user" : "Jack",
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
Get API
GET users/_doc/1
另外,我們可以只查看_source
裏面的內容,GET my_index/_source/1
。我們還可查看除_source
之外的其他內容, GET my_index/_doc/1?_source=false
。
Delete API
DELETE users/_doc/1
Update API
更新的時候,文檔必須已經存在。同時,更新只對相應字段做增量修改,或者說是合併操作(Merge Operation)。
#在原文檔上增加字段
POST users/_update/1/
{
"doc":{
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
}
還有一種操作不屬於 Update API 但達到的是更新操作,有的時候,我們想對文檔進行全部替換,而非增量操作,可考慮使用Index API來實現。
#Update 指定 ID (先刪除,在寫入)
PUT users/_doc/1
{
"user" : "Mike"
}
Multi-document APIs
Multi get(mget) API
批量獲取API,用於查詢一個或多個索引。從Elasticsearch7.x開始,索引下面的類型推薦只有一個,且名稱必須爲_doc。
批量讀取一次可以根據條件獲取多個結果批量操作,可以減少網絡連接所產生的開銷,提高性能
GET /_mget
{
"docs" : [
{
"_index" : "user",
"_id" : "1"
},
{
"_index" : "comment",
"_id" : "2"
}
]
}
我們還可以查詢同一個索引。
GET /test/_mget
{
"docs" : [
{
"_type" : "_doc",
"_id" : "1"
},
{
"_type" : "_doc",
"_id" : "2"
}
]
}
我們還可以進一步簡寫。
GET /test/_doc/_mget
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2"
}
]
}
我們還可以再進一步簡寫。
GET /test/_doc/_mget
{
"ids" : ["1", "2"]
}
Bulk API
一次請求 Rest API 的操作的開銷是比較大的,Bulk API 的思想是就是在一次 API 調用中,對索引進行不同的操作。
支持四種類型操作:
- Index
- Create
- Update
- Delete
可以在 URL 中指定 Index,也可以再請求的 PayLoad 中進行操作中單條操作失敗,並不會影響其他操作返回結果包含了每一條操作的執行結果
#執行第1次
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
1、每個操作都有返回
2、單條操作失敗,不影響其他的操作進行
常見錯誤返回
錯誤 | 原因 |
---|---|
無法連接 | 網絡故障或集羣掛了 |
連接無法關閉 | 網絡故障或節點出錯 |
429 | 集羣過於繁忙 |
4xx | 請求體格式出錯 |
500 | 集羣內部錯誤 |