通過Kibana學習ES的基礎語法
1 document結構
ES是一款面向文件的資料搜尋、分析引擎.
document結構說明:
(1) 基於面向物件的開發思想, 應用系統中的資料結構都是很複雜的: 物件中巢狀物件, 如CRM系統中的客戶物件中, 還會嵌入客戶相關的企業物件.
(2) 物件資料儲存到資料庫中, 需要分解, 將巢狀物件分解為扁平的多張表資料, 每次操作時需要還原回物件格式, 過程繁瑣.
(3) ES儲存的是JSON格式的文件, 基於此, ES可以提供複雜的索引, 全文檢索, 分析聚合等功能.
(4) document格式示例:
{ "id": "5220", "name": "張三", "sex"
: "男", "age": 25, "phone": 13312345678, "email": "[email protected]", "company": { "name": "Alibaba", "location": "杭州" }, "join_date": "2018/11/01" }
2 document的常見CRUD操作
背景說明: 以電商系統的搜尋子系統為例, 說明常用操作.
2.1 新增商品: 新增文件並建立索引
-
新增API:
PUT /index/type/id { "JSON格式的文件資料"
說明: ES會自動建立PUT API中指定的index和type, 不需要提前建立;
而且ES預設對document的每個field都建立倒排索引, 保證它們都可以被檢索.
-
新增示例:
PUT /shop/it_book/1 { "name": "Java程式設計思想", "author": "[美] Bruce Eckel", "desc": "Java學習必讀經典,殿堂級著作!", "price": 109, "date": "2007-06", "publisher": "機械工業出版社", "tags": [ "Java"
-
響應資訊:
{ "_index": "shop", "_type": "it_book", "_id": "1", "_version": 1, "result": "created", # 操作結果: created(建立)了索引 "_shards": { "total": 2, "successful": 1, "failed": 0 }, "created": true # 是否為建立操作 }
-
再新增如下資料:
PUT /shop/it_book/2 { "name": "深入理解Java虛擬機器:JVM高階特性與最佳實踐", "author": "周志明", "desc": "Java圖書領域公認的經典著作", "price": 79, "date": "2013-06", "publisher": "機械工業出版社", "tags": [ "Java", "虛擬機器", "最佳實踐" ] } PUT /shop/it_book/3 { "name": "Java併發程式設計的藝術", "author": "方騰飛,魏鵬,程曉明", "desc": "阿里系工程師的併發程式設計實踐", "price": 59, "date": "2015-07", "publisher": "機械工業出版社", "tags": [ "Java", "併發程式設計" ] }
2.2 查詢商品: 檢索文件
-
檢索API:
GET /index/type/id
-
檢索示例:
GET /shop/it_book/2
-
響應資訊:
{ "_index": "shop", "_type": "it_book", "_id": "2", "_version": 1, "found": true, "_source": { "name": "深入理解Java虛擬機器:JVM高階特性與最佳實踐", "author": "周志明", "desc": "Java圖書領域公認的經典著作", "price": 79, "date": "2013-06", "publisher": "機械工業出版社", "tags": [ "Java", "虛擬機器", "最佳實踐" ] } }
2.3 修改商品: 替換文件
-
替換API - 與新增API相同, 只不過文件id要存在, 此時系統將判定為修改操作:
—— 無論文件資料是否存在修改, 對同一id的文件執行1次以上的PUT操作, 都是修改操作.
PUT /index/type/id { "JSON格式的文件資料" }
注意: 替換方式的不便之處: 必須填寫要修改文件的所有field, 如果缺少, 修改後的文件中將丟失相關field.
-
替換示例 - 為name添加了"(第4版)"
PUT /shop/it_book/1 { "name": "Java程式設計思想(第4版)", "author": "[美] Bruce Eckel", "desc": "Java學習必讀經典,殿堂級著作!", "price": 109, "date": "2007-06", "publisher": "機械工業出版社", "tags": [ "Java", "程式語言" ] }
-
響應資訊:
{ "_index": "shop", "_type": "it_book", "_id": "1", "_version": 2, "result": "updated", // 操作結果: updated(修改)了索引 "_shards": { "total": 2, "successful": 1, "failed": 0 }, "created": false // 是否為建立操作 }
2.4 修改商品: 更新文件
-
更新API:
—— 指定更新文件的某些field, 其他的不予理會.
POST /index/type/id/_update { "doc": { "field u want to update": "new value of ur update's field" } }
注意: 與替換方式相比, 更新方式的好處: 可以更新指定文件的指定field, 未指定的field也不會丟失.
-
更新示例 - 將name改為英文:
POST /shop/it_book/1/_update { "doc": { "name": "Thinking in Java(4th Edition) " } }
-
響應資訊:
{ "_index": "shop", "_type": "it_book", "_id": "1", "_version": 4, "result": "updated", // 操作結果: updated(修改)了索引 "_shards": { "total": 2, "successful": 1, "failed": 0 } }
-
此時檢視該文件
GET /shop/it_book/1
即可發現更新成功.
2.5 刪除商品: 刪除文件
-
刪除API:
—— 指定更新文件的某些field, 其他的不予理會.
DELETE /index/type/id
-
刪除示例:
DELETE /shop/it_book/1
-
響應資訊:
{ "found": true, "_index": "shop", "_type": "it_book", "_id": "1", "_version": 5, "result": "deleted", // 操作結果: deleted(刪除)了索引 "_shards": { "total": 2, "successful": 1, "failed": 0 } }
-
再次檢視刪除的文件:
GET /shop/it_book/1
-
響應資訊:
{ "_index": "shop", "_type": "it_book", "_id": "1", "found": false // 沒有查詢到相關文件 }
為了後期演示的方便, 再次將該文件新增至索引中:
PUT /shop/it_book/1 { "name": "Java程式設計思想", "author": "[美] Bruce Eckel", "desc": "Java學習必讀經典,殿堂級著作!", "price": 109, "date": "2007-06", "publisher": "機械工業出版社", "tags": [ "Java", "程式語言" ] }
版權宣告
作者: ma_shoufeng(馬瘦風)
您的支援是對博主的極大鼓勵, 感謝您的閱讀.
本文版權歸博主所有, 歡迎轉載, 但未經博主同意必須保留此段宣告, 且在文章頁面明顯位置給出原文連結, 否則博主保留追究相關人員法律責任的權利.