ElasticSearch文檔操作

本節我們來講解一下ES中文檔的相關操作

一:索引/更新文檔

ES中索引和更新文檔都是PUT操作。

PUT /{IndexName}/{TypeName}/{ID}

比如我又一條測試文檔如下:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "user",
        "_type" : "introduce",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "jack",
          "age" : 20,
          "gender" : "male"
        }
      }
    ]
  }
}

索引一條新文檔

PUT /user/introduce/2
{
   "name":"lucy",
   "age":18,
   "gender":"female"
}

執行檢索GET /user/introduce/_search?pretty查看文檔

......
{
  "_index" : "user",
  "_type" : "introduce",
  "_id" : "2",
  "_score" : 1.0,
  "_source" : {
    "name" : "lucy",
    "age" : 18,
    "gender" : "female"
  }
},
{
  "_index" : "user",
  "_type" : "introduce",
  "_id" : "1",
  "_score" : 1.0,
  "_source" : {
    "name" : "jack",
    "age" : 20,
    "gender" : "male"
  }
}
......

這時候就插入了索引了一條新的文檔了,接下來我們更新一條文檔試試

PUT /user/introduce/1
{
   "name":"jone"
}
//返回
{
  "_index" : "user",
  "_type" : "introduce",
  "_id" : "1",
  "_version" : 4,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}

注意到 result變爲了updated

再次執行檢索GET /user/introduce/_search?pretty查看文檔

........
"hits" : [
      {
        "_index" : "user",
        "_type" : "introduce",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "lucy",
          "age" : 18,
          "gender" : "female"
        }
      },
      {
        "_index" : "user",
        "_type" : "introduce",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "jone"
        }
      }
    ]
.......

注意到沒有,_id爲1的文檔裏面只有name一個字段了,agegender都沒了。這說明PUT是對整個文檔更新而不是文檔中的某一個或某幾個字段更新

文檔局部字段更新POST

我先還原數據,然後再對某幾個字段更新

POST /{IndexName}/{TypeName}/{ID}/_update
{
    "doc":{}
}
POST /user/introduce/1/_update
{
   "doc":{
      "name":"jone",
      "age":22
   }
}

POST也可以創建一個文檔

POST /user/introduce?pretty
{
  "age":20
}

//返回
{
  "_index" : "user",
  "_type" : "introduce",
  "_id" : "VXetwmkBA0w1SMUATD7Z",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

系統會自動分配_id這一點和MongoDB是一樣的

二:刪除文檔

DELETE /{IndexName}/{TypeName}/{ID}?pretty
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章