ElasticSearch學習之——基本的文檔CURD
一、文檔的添加
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