1. 程式人生 > >ElasticSearch學習之——基本的文檔CURD

ElasticSearch學習之——基本的文檔CURD

文檔 uniq 同時 base64 arch source code 多條 pan

一、文檔的添加

POST http://127.0.0.1:9200/{index}/{type}/{id}
{
"key":"value",
"key2":"value2",
"key2":"value2",
}

這是最基本的一個文檔添加語句{index}表示添加的索引如果沒有回自動建立(可以理解為數據庫),{type}標示類型如果沒有回自動建立(可以理解為表),{id}標示添加文檔的id可以理解為數據庫中的主鍵,添加的文檔內容就是json 格式的數據,在添加前可以不定義每個字段的類型ES可以自動的根據類型定義字段的屬性。

添加多個文檔

POST http://127.0.0.1:9200/{index}/{type}/_bulk
{"index":{"_id":"1"}} {"key1":"value1"} {"index":{"_id":"2"}} {"key1":"value2"}

_bulk 表示大量id在json裏面定義

不同索引下的批量添加

POST http://127.0.0.1:9200/_bulk
{ "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }} 
{ "key1": "key2" }
{ "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }} 
{ 
"key1": "key2" } { "index": { "_index": "{index}", "_type": "{type}", "_id": "{id}" }} { "key1": "key2" }

在添加時index和type必須明確,但是可不指定id的值,如果不指定會自動生成的id有22字符串長度URL-safe, Base64-encoded string universally unique identifiers, 或者叫 UUID。

如果指定的id已經存在就會覆蓋原來的json數據。

在添加時指定了id但是又想避免覆蓋可以在url上添加_create或者?op_type=create參數 添加的id如果已經存在會返回409狀態。

添加成功會返回

{
"_index": "{index}",//索引名
"_type": "{type}",//類型名
"_id": "{id}",//id
"_version": 1,//數據版本號 改變一次默認會加1
"result": "created", // 結果添加
"_shards": {
"total": 2,//在多少個分配中進行了操作
"successful": 1,//成功建立的索引分片數量至少時1
"failed": 0//建立索引失敗的片數
},
"created": true //如果是添加為true 修改為false
}

二、文檔的修改

上面在添加文檔的時候已經說了,在添加的時候如果自定了id如果id已經存在了就會覆蓋原來的,這就是最基本的修改。

還有一種修改是通過腳本在原有的數據基礎上進行修改。

POST /{index}/{type}/{id}/_update
{
  "script" : "ctx._source.key += 5"
}

ctx._source 表示當前文檔。在當前文檔的key屬性的原有值上在加5。

可以增加新的屬性。

每次修改成功會返回一個json格式和上面添加類似,同時_version默認加1

三、文檔的刪除

刪除文檔比較簡單只要發出的請求是DELETE類型同時指定index,type,id 就可以了

例如:

DELETE /{index}/{type}/{id}/_update

成功返回:

{
"found" : true,
"_index" : {index},
"_type" : {type},
"_id" : {id},
"_version" : 3
}

刪除是_version也會加1。

如果文檔本身不存在會得到一個 404 的狀態。found值為false

在ES內部原來的文檔不會被立馬刪除,只是被標記為被刪除,但是已經不能訪問了。在後面ES會自己刪除。

四、文檔的查看

1.直接通過id獲取文檔

GET /{index}/{type}/{id}?pretty

結果為:

{
"_index" : {index},
"_type" : {type},
"_id" : {id},
"_version" : 3,
"found" : true,
"_source":{
     "key1":"value"  
}
}

返回對應inden內type中id的數據pretty標示返回的數據以json格式化 換行輸出,方便閱讀。

_index 表示查詢的索引,_type 標示查詢的類型 ,_id 標示查詢的id , found標示查詢結果,_source 標示查詢到的源數據

在查詢過程中_type 是可選的 如果不全定可以使用_all。

在查詢是可以設置是否返回_source字段,只需要在url後面添加_source=false就可以了,例如:

GET /{index}/{type}/{id}?_source=false&pretty

如果返回_source的字段中只需要返回一個或某幾個字段可以在url後面添加_source_include或者_source_exclude來設置

例如:

GET /{index}/{type}/{id}?_source_include=key1,key3,keys11*&pretty

就像上面的連接一樣多個可以用逗號隔開,也可以使用通配符*。

在查詢時也可以設置值返回源數據,例如:

GET /{index}/{type}/{id}/_source?pretty

2.多文檔查詢

在一次中查詢多個文檔,可以分別指定index,type,id來進行多個文檔的查詢。查詢的結果包含查詢到的文檔數組。

例如

POST /_mget?pretty
{
  "docs":[
            {"_index":"index1","_type":"index1","_id":"1"},
            {"_index":"index2","_type":"index2","_id":"2"}
  ]
}        

返回的結果結構為:

{
     "docs":[
         {
            
             "_index" : {index},
             "_type" : {type},
             "_id" : {id},
             "_version" : 3,
              "found" : true,
              "_source":{
                      "key1":"values1"
                   }
          },
     {
            
             "_index" : {index},
             "_type" : {type},
             "_id" : {id},
             "_version" : 3,
              "found" : true,
              "_source":{
                      "key1":"values1"
                   }
          }

  ]
}            

同一個索引或類型下多條件查詢 同等於 or 查詢

POST /{index}/{type}/_mget?pretty
{
  "docs":[
           {"_id":"1","_source":false},
           {"_id":"2","_source":["key1","key2"]}

  ]
}         

ElasticSearch學習之——基本的文檔CURD