es内嵌文档查询_ElasticSearch 文档的增删改查都不会?
本文主要是介紹 ElasticSearch 的文檔增刪改查和批量操作,同時會介紹一些 REST API 返回狀態碼的具體含義。
我們先來看下這個表:
這個表包含了 Index、Create、Read、Update、Delete 這五種方法,我們先來看下 CRUD 操作的 HTTP 請求都長什么樣子?
首先是提供一個 HTTP 的 method,后面是索引名字,在 7.0 之后所以的 Type 都用 _doc 表示,后面是文檔 id。
再簡單了解了 CURD 操作的 HTTP 請求后,那么讓我們先來了解下如何創建文檔:
創建文檔
Create 支持兩種方式,一種是指定文檔 id 創建文檔,像上面這張圖就是;另一種是通過調用 post /users/_doc 去讓 ES 自動生成文檔 id。
自己指定文檔 id創建文檔,需要考慮 id 的均衡性,避免產生分配不均衡的問題。 ES 的 hash 函數會確保文檔 id 被均勻分配到不同的分片。當我們執行剛才的命令,可以返回如下結果:
其中 _version 每一次操作,都會 + 1,它是一個鎖的機制,當并行修改文檔的時候,更新的版本號比文檔當前的版本號小時就會報錯,不允許做修改。
創建文檔時,如果索引不存在,ES 會自動創建對應的 index 和 type。
接下來看下另一種創建文檔的方式,不指定 id 創建文檔,HTTP 請求也變為了 POST,具體的請求如下:
返回的結果如下:
Index 和 Create 區別為:如果文檔不存在,就索引新的文檔,否則現有文檔就會被刪除,新的文檔被索引,版本信息 _version + 1。
查詢文檔
Get 方法比較簡單,只需要 Get 索引名稱/_doc/文檔 id,通過執行這個命令就可以知道文檔的具體信息了。
當執行這條語句后會返回 HTTP 200,具體返回結果如下:
其中 _index 為索引,_type 為類型,_id 為文檔 id,_version 為版本信息,_source 存儲了文檔的完整原始數據。
當查詢的文檔 id 不存在的時候,會返回 HTTP 404,且 found 為 false,具體結果如下:
更新文檔
Update 方法采用 HTTP POST,在請求體中必須指明 doc,在把具體文檔提供在 HTTP 的 body 里。Update 和 Index 方法不同,Update 方法不會刪除原來的文檔,而是實現真正的數據更新。
比如在原來的文檔 id 為 1 的文檔上增加字段,具體請求如下:
執行后,版本信息 _version + 1,讓我們再去查詢下該文檔:
可以看到,新增字段已經成功了。
刪除文檔
Delete 方法也很簡單,Delete 索引名稱/_doc/文檔 id 就可以了,再這里就不再做代碼演示了。
在介紹完文檔的基本 CRUD 操作后,讓我們來看看批量操作吧:
Bulk API
在一個 REST 請求中,重新建立網絡開銷是十分損耗性能的,因此 ES 提供 Bulk API,支持在一次 API 調用中,對不同的索引進行操作,從而減少網絡傳輸開銷,提升寫入速率。
它支持 Index、Create、Update、Delete 四種類型操作,可以在 URI 中指定索引,也可以在請求的方法體中進行。
同時多條操作中如果其中有一條失敗,也不會影響其他的操作,并且返回的結果包括每一條操作執行的結果。
比如輸入如下代碼:
當我們執行命令后,結果如下:
took 表示消耗了 93 毫秒,errors 為 true 表示在這些操作中錯誤發生,發現是 update 操作發生了錯誤,id 為 2 的文檔不存在,所以報錯了。
在使用 Bulk API 的時候,當 errors 為 true 時,需要把錯誤的操作修改掉,防止存到 ES 的數據有缺失。
批量查詢文檔
批量查詢需要指明要查詢文檔的 id,可以在一個 _mget 操作里查詢不同索引的數據,可以減少網絡連接所產生的開銷,提高性能。
下面我們來實際操作下,輸入以下代碼執行,就可以得到文檔 id 為 1,3 的數據。
運行結果如下:
在介紹完文檔的一些操作,最后讓我們看下 REST API 常見錯誤返回有哪些吧!
REST API 常見錯誤返回
剛才在演示中,當查詢文檔 id 不存在的時候就會報 404 錯誤,而且 ES 還有各種各樣的返回,下面通過一個表格了解下:
總結
本文主要介紹了文檔的 CRUD 操作,還有 Bulk API、_mget API,這些批量操作可以提高 API 調用性能,但是不要一次發送過多數據,也有可能會對 ES 集群產生過大的壓力,導致性能有所下降。一般建議是 1000-5000 個文檔,如果你的文檔很大,可以適當減少隊列,大小建議是 5-15 MB,默認不能超過 100 M。
參考文獻Elastic Stack從入門到實踐
Elasticsearch頂尖高手系列
Elasticsearch核心技術與實戰https://www.elastic.co/guide/en/elasticsearch/reference/7.1/docs-index_.html
總結
以上是生活随笔為你收集整理的es内嵌文档查询_ElasticSearch 文档的增删改查都不会?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国56式军刺
- 下一篇: 数据库设置_CentOS7 - 设置My