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

奮程式序猿發表於2017-11-27

一、文件的新增

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"]}

  ]
}         

 3.沒有任何條件的查詢

GET /{index}/{type}/_search

沒有任何條件的查詢某個index下type中的文件,結果預設會展示出前20條文件

也可以在查詢時新增條件,假設文件中有一個name欄位需要查詢出name為張三的文件

GET /{index}/{type}/_search?q=name:張三

如果查詢的條件比較複雜就需要使用結構化查詢語句(DSL)了。

轉載請註明來自:http://www.cnblogs.com/phpshen/p/7887439.html

相關文章