主要說明 es CRUD的實作方式以及範例
此篇先介紹使用 cURL 實作 CURD,下一重再介紹kibana實作
es提供REST API,可用來管理cluster、建index、新增資料、搜尋資料等等
可透過 command line(cURL) 或 kibana的console(Dev Tools) 來操作
對於應用程式(APP),也可使用官方提供的客戶端(es client)來達成
而這些操作的指令都是es定義且為JSON格式的查詢語言(Query DSL)
使用 cURL 的方式發request給es 和 任何HTTP request的格式一樣
curl -u <USER:PASSWORD> -X<VERB> -H <HEADER> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
<USER>
帳號(optional)
如果server是需要驗證,則需要提供
<PASSWORD>
密碼(optional)
如果server是需要驗證,則需要提供
<VERB>
HTTP Method (GET, POST, PUT, HEAD, DELETE, and etc.)
如未提供,則預設是 GET
<HEADER>
request header資訊
<PROTOCOL>http
或 https
<HOST>
node的主機名稱或ip,如果是架在本機可使用localhost
<PORT>
es使用的port
如自己架設在機器內,es預設使用的port是9200
<PATH>
即API
<QUERY_STRING>
query的參數 (optional),
例如:使用 ?pretty
(pretty-print)可讓回傳的JSON更易讀
<BODY>
JSON編碼的body (不一定每個query都需要body)
此處僅介紹基本且es cURL比較常用到的參數,詳細更多資訊可參考Reference的 cURL Intro
前置作業
<PROTOCOL>://<HOST>:<PORT>
需要完成Elastic Cloud的部署,如未完成請先至 Elastic Stack第三重 完成部署
如已完成部署,至部署詳目頁,點擊 應用程式(Applications) 的 Elasticsearch 旁的 Copy endpoint
以我的為例,endpoint為 https://{hash value}.asia-east1.gcp.elastic-cloud.com:9243
以下範例會使用 {endpoint}
來代替
<USER:PASSWORD>
{AUTH}
來代替如果真的忘記或沒記下來的話,還是有救的,官方提供的 重設密碼
取得指定index內的所有documents
Request
curl -u {AUTH} {endpoint}/shawn_index/_search?pretty
介紹一下cURL參數的對應,以此為例,後續就以此類推不多加闡述
GET
shawn_index/_search
pretty
Response
結果:
回傳錯誤(error),查看錯誤原因(error.root_cause.reason
)是no such index [shawn_index]
這是正確的,因為我根本還沒建立index也還沒新增資料!!!
會先教學操作 取得index內的documents,是為了讓後續操作可以以此指令來做驗證
新增資料(index)-不指定id
[補充說明]
此處的index為動詞(可想像為新增
的意思)
如上述的index內的documents
的index即為名詞
官方文件都是這樣用,我就不更動,以後如果大家在看官方文件也比較快理解
Request
curl -u {AUTH} {endpoint}/shawn_index/_doc?pretty -XPOST -H "Content-Type: application/json" -d "{\"name\": \"Benedict Cumberbatch\", \"television\": [\"Sherlock\", \"To the Ends of the Earth\"]}"
-d後面為 <BODY>
,使用者可自行輸入
[注意]
裡面需要多加反斜線(backslash),否則會無法被解析 (我環境是 Windows 10 + cmder)
Response
結果:
成功新增資料,以此為例,此時我已新增了index shawn_index
,且建立了一筆資料
即使在沒有建立index以及指定fields情況下,仍可成功新增,是es的特性,詳細介紹可參閱 Elastic Stack第二重
驗證結果:
使用 取得指定index內的所有documents 來查看剛剛那筆資料是否存在
教個偷懶的做法,因為是
GET
method,所以可以直接把{endpoint}/shawn_index/_search?pretty
貼到瀏覽器來查看,就不需要一直用 cURL 了
更新資料(update)
Request
curl -u {AUTH} {endpoint}/shawn_index/_doc/PdmeqnQBEQfIjDy12AEW?pretty -XPOST -H "Content-Type: application/json" -d "{\"name\": \"Benedict Cumberbatch\", \"television\": [\"Sherlock\", \"To the Ends of the Earth\", \"Hawking\"]}"
此處的{_id}
,請填入 新增資料(index)-不指定id 的response中的 _id
-> PdmeqnQBEQfIjDy12AEW
Response
成功更新資料,其中可以發現 _version
(版本計數) 更新到 2
驗證結果:
取得單筆資料(document)
Request
curl -u {AUTH} {endpoint}/shawn_index/_doc/PdmeqnQBEQfIjDy12AEW?pretty
此處的{_id}
,請填入上述 新增資料(index)-不指定id/更新資料(update) 的response中的 _id
-> PdmeqnQBEQfIjDy12AEW
Response
新增資料(index)-指定id
Request
curl -u {AUTH} {endpoint}/shawn_index/_doc/{_id}?pretty -XPUT -H "Content-Type: application/json" -d "{\"name\": \"Martin Freeman\", \"television\": [\"Sherlock\", \"A Confession\"]}"
此處的{_id}
請自行輸入欲設定的id -> my_id
官方文件: 欲指定
_id
是用PUT
method,但實測過POST
也是可以的
Response
成功新增資料,其中可以發現 _id
是request內指定的 my_id
驗證結果:
刪除單筆資料(document)
Request
curl -u {AUTH} {endpoint}/shawn_index/_doc/{_id}?pretty -XDELETE
此處的{_id}
請自行輸入欲刪除的id -> my_id
Response
驗證結果:
小小新手,如有理解錯誤或寫錯再請不吝提醒或糾正
Query DSL
cURL Intro
Official Es cURL examples