【Elasticsearch 7 探索之路】(二)文檔的 CRUD 和批量操做

上一篇,咱們介紹了什麼是 Elasticsearch,它能作什麼用以及基本概念(索引 Index、文檔 Document、類型 Type)理解。這篇主要對 文檔的基本 CRUD 以及如何批量操做進行講解。下面讓咱們進入正題。html

1、文檔的 CRUE網絡

Create 文檔性能

支持自動生成文檔 Id 和指定文檔 Id 兩種方法code

#create document. 自動生成 Id
POST songs/_doc
{
  "name":"說好不哭",
  "author":"周杰倫",
  "price":3
}

#create document. 指定Id。若是 Id 已經存在,報錯
PUT songs/_create/1
{
  "name":"說好不哭",
  "author":"周杰倫",
  "price":3
}

Get 文檔orm

#找到文檔
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 版本信息,同一個 Id 的文檔被刪除了,版本號也會增長
      • _source 中默認包含文檔的原始信息
  • 找不到,返回 HTTP 404

Index 文檔htm

Index 也是用於建立文檔的方法,和 Create 不一樣有一些不一樣,若是文檔不存在狀況,直接建立新文檔,否者刪除原來的文檔,新文檔被索引,_version 版本加一。blog

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 不會刪除原來文檔,而是實現真正更新
  • 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 批量操做get

  • Bulk 支持再一次調用中,對不一樣索引進行操做
  • 支持 Index、Create、Update、Delete 類型操做
  • 單條錯誤不影響其餘操做進行
  • 每一條操做都會有對應的執行的結果顯示
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 批量讀取

顧名思義就是能夠對不一樣索引的文檔進行批量讀取,只須要提供索引名稱和 Id 就能夠在一次 API 中所有讀取,減小網絡開銷。

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

msearch 批量查詢

一樣 ES 也提供了 msearch 對不一樣索引進行批量查詢。

# 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 的樣例數據,須要手動點擊添加。

本篇主要對文檔的 CRUD 以及批量操做 API 進行講解。在這裏提一點,批量操做能夠幫助咱們提升對 API 調用性能,但若是一次提交過多數據,也是有可能會致使 ES 過大的壓力,反而形成性能降低。

系列文章

【Elasticsearch 7 搜索之路】(一)什麼是 Elasticsearch?

相關文章
相關標籤/搜索