es內嵌文檔查詢_ElasticSearch 文檔的增刪改查都不會?

6df9826329a0d2ea35277f300c6e7835.png

本文主要是介紹 ElasticSearch 的文檔增刪改查和批量操作,同時會介紹一些 REST API 返回狀態碼的具體含義。

我們先來看下這個表:

6d5c0f8d8d5b099393b853d8457f5a08.png

這個表包含了 Index、Create、Read、Update、Delete 這五種方法,我們先來看下 CRUD 操作的 HTTP 請求都長什么樣子?

首先是提供一個 HTTP 的 method,后面是索引名字,在 7.0 之后所以的 Type 都用 _doc 表示,后面是文檔 id。

再簡單了解了 CURD 操作的 HTTP 請求后,那么讓我們先來了解下如何創建文檔:

創建文檔

09d5d3b5892709f312a21ca4c046f1a0.png

Create 支持兩種方式,一種是指定文檔 id 創建文檔,像上面這張圖就是;另一種是通過調用 post /users/_doc 去讓 ES 自動生成文檔 id

自己指定文檔 id創建文檔,需要考慮 id 的均衡性,避免產生分配不均衡的問題。 ES 的 hash 函數會確保文檔 id 被均勻分配到不同的分片。

當我們執行剛才的命令,可以返回如下結果:

135cf03460882e945d3fddca29949ade.png

其中 _version 每一次操作,都會 + 1,它是一個鎖的機制,當并行修改文檔的時候,更新的版本號比文檔當前的版本號小時就會報錯,不允許做修改。

創建文檔時,如果索引不存在,ES 會自動創建對應的 index 和 type。

接下來看下另一種創建文檔的方式,不指定 id 創建文檔,HTTP 請求也變為了 POST,具體的請求如下:

c9989d6b8036a24bad05219c1bca96c5.png

返回的結果如下:

bc3841663fdbaad6a64ff01a5b9107b8.png

Index 和 Create 區別為:如果文檔不存在,就索引新的文檔,否則現有文檔就會被刪除,新的文檔被索引,版本信息 _version + 1。

查詢文檔

Get 方法比較簡單,只需要 Get 索引名稱/_doc/文檔 id,通過執行這個命令就可以知道文檔的具體信息了。

55f14f2e43d1a484bb78657c48554619.png

當執行這條語句后會返回 HTTP 200,具體返回結果如下:

65d1de15a7f614038836f3a1269ac80f.png

其中 _index 為索引,_type 為類型,_id 為文檔 id,_version 為版本信息,_source 存儲了文檔的完整原始數據。

當查詢的文檔 id 不存在的時候,會返回 HTTP 404,且 foundfalse,具體結果如下:

cf5f17e8a2ee0a69ae9680e1e13df80f.png

更新文檔

Update 方法采用 HTTP POST,在請求體中必須指明 doc,在把具體文檔提供在 HTTP 的 body 里。Update 和 Index 方法不同,Update 方法不會刪除原來的文檔,而是實現真正的數據更新。

比如在原來的文檔 id 為 1 的文檔上增加字段,具體請求如下:

e4df3a43f2dedace6534582b42b6557f.png

執行后,版本信息 _version + 1,讓我們再去查詢下該文檔:

45518a654f637b43784878c2f21811ba.png

可以看到,新增字段已經成功了。

刪除文檔

Delete 方法也很簡單,Delete 索引名稱/_doc/文檔 id 就可以了,再這里就不再做代碼演示了。

在介紹完文檔的基本 CRUD 操作后,讓我們來看看批量操作吧:

Bulk API

在一個 REST 請求中,重新建立網絡開銷是十分損耗性能的,因此 ES 提供 Bulk API,支持在一次 API 調用中,對不同的索引進行操作,從而減少網絡傳輸開銷,提升寫入速率。

它支持 IndexCreateUpdateDelete 四種類型操作,可以在 URI 中指定索引,也可以在請求的方法體中進行。

同時多條操作中如果其中有一條失敗,也不會影響其他的操作,并且返回的結果包括每一條操作執行的結果。

比如輸入如下代碼:

45514ab79d18442373c2c6b470bf610b.png

當我們執行命令后,結果如下:

ecf2b2c9b10f33c1d488ec2c669d0aad.png

took 表示消耗了 93 毫秒,errorstrue 表示在這些操作中錯誤發生,發現是 update 操作發生了錯誤,id 為 2 的文檔不存在,所以報錯了。

在使用 Bulk API 的時候,當 errorstrue 時,需要把錯誤的操作修改掉,防止存到 ES 的數據有缺失。

批量查詢文檔

批量查詢需要指明要查詢文檔的 id,可以在一個 _mget 操作里查詢不同索引的數據,可以減少網絡連接所產生的開銷,提高性能。

下面我們來實際操作下,輸入以下代碼執行,就可以得到文檔 id 為 1,3 的數據。

4b468b866c74a26b17091293c015fbc8.png

運行結果如下:

c91b4b71fd7a7e0ef830f490b22a014c.png

在介紹完文檔的一些操作,最后讓我們看下 REST API 常見錯誤返回有哪些吧!

REST API 常見錯誤返回

剛才在演示中,當查詢文檔 id 不存在的時候就會報 404 錯誤,而且 ES 還有各種各樣的返回,下面通過一個表格了解下:

503999d810f361ce15e955f1a3b23547.png

總結

本文主要介紹了文檔的 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533888.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533888.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533888.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在ps添加箭頭_「PS精選案例教程」制作斑駁生銹字體

這個教程會教您如何設計發光斑駁的字體特效,會教您運用PS濾鏡和紋理圖片,同時也詮釋了如何運用筆刷和圖層樣式給最終的字體效果增添光感。來,先看看最終效果!第一步:創建一個1024*768的新文檔。前景色#532118&#xff…

php 獲取系統環境變量,java讀取操作系統環境變量

java讀取操作系統環境變量import java.util.*;import java.io.*;class SysProb{//返回當前系統變量的函數,結果放在一個Properties里邊,這里只針對win2k以上的,其它系統可以自己改進public Properties getEnv() throws Exception{Properties …

查python答案的軟件-中國大學MOOC的APP慕課用Python玩轉數據答案查題公眾號

下面屬于歐盟成員對土耳其要求加入歐盟的顧慮的一項是:()A.土耳其地理位置特殊B.土耳其經濟發 某種雙面高密軟盤片格式化后,若每面有A個磁道,每個磁道有B個扇區,每個扇區有C個字節。則該種軟盤 通信工程施工中電源線與…

車輛調度 matlab,基于遺傳算法的車輛調度問題的matlab源程序

越界 發表于 2013-7-8 09:16 有償服務哦function chushis)K4; %最多4輛車inn100;%迭代次數上限citynum8;%需求點數量KMcitynumK1; %配送途徑種類%產生初始種群mzeros(1,inn);mm;szeros(inn,citynumK1);for i1:1:inns(i,:)randperm(KM); %隨機排列構成個體ends[m s];for i1:inn…

strtotime()加半個小時_椰子雞這樣做太好吃了,一滴水不用加,鮮香嫩滑,做法非常簡單...

轉眼就是6月了,時間真的好快啊,好似白駒過隙,一眼就過去了。剛剛還是桃花開的時候,轉眼五月桃都熟了。不得不說,李煜說得很對,“林花謝了春紅,太匆匆!”6月了,6月有什么呢…

webpack 入口文件 php,如何實現webpack多入口文件打包配置

本篇文章主要介紹了webpack多入口文件頁面打包配置詳解,現在分享給大家,也給大家做個參考。大多數情況下,我們使用 webpack來打包單頁應用程序,這個時候只需要配置一個入口,一個模板文件,但也不盡是如此&am…

接口里面的方法都是抽象方法嗎_大家都在講高中學習的方法有哪些,那方法和技巧有什么異同的嗎?...

大家都在講高中學習的方法有哪些,那方法和技巧有什么異同嗎?高中怎樣學習,方法重要還是技巧更重要?老牛倒是覺得,二者密不可分,缺一不可。那么,我們一起來看看,高中怎樣學習才是最好…

python 筆試題 英方_4000字轉型數據分析師筆試面試經驗分享

大家好,我是戴師兄~在上一篇文章中我分享了快速自學數據分析的經驗。本篇文章,我將跟大家分享下我的筆試和面試心得。開頭先說說我轉型前的職業背景:想看筆試面試經驗的同學萌可以直接跳過這一段~2018年我從中國人民大學經濟管理學專業畢業&a…

android 抓取webview中的所有圖片_如何一鍵提取PDF文檔中的所有圖片?

原標題:如何一鍵提取PDF文檔中的所有圖片?目前PDF文檔被大家廣泛應用,主要是因為PDF文檔在傳輸和轉換的過程中比較穩定,所以PDF格式幾乎是辦公文件格式的首選。大家都知道PDF文檔轉換格式以及編輯都需要專門的PDF編輯器來實現。但…

php shell 交互,通過 Tinker 實現 Laravel 命令行交互式 Shell

通過 Tinker 實現 Laravel 命令行交互式 Shell由 學院君 創建于2年前, 最后更新于 1年前版本號 #19508 views4 likes0 collectsREPL 與 PsySHLaravel 自帶了一個功能強大的 REPL —— Tinker,所謂 REPL,是 Read–Eval–Print-Loop 的縮寫,這是…

python中垃圾回收機制_Python中的變量和垃圾回收機制

1、python中的變量python和java中的變量本質不一樣。java中聲明變量時要指定變量的數據類型,int、str或某一類,之后虛擬機就會在內存中申請一塊空間,空間的大小跟類型相關。通俗的理解就是把變量想象成一個盒子,盒子里能裝什么東西…

戴爾電腦好還是華為好_華碩和戴爾筆記本哪種好 華碩和戴爾優缺點分析【詳解】...

隨著時代快速的發展,筆記本電腦已經成了我們生活中的標配。如今,市面上筆記本電腦的款式眾多,相信大家對華碩和戴爾并不陌生吧!那么,我們該怎么去選擇呢?今天小編就給大家介紹華碩和戴爾筆記本哪個好&#…

php檢查 session是否存在,檢查sessionid已知的PHP會話是否處于活動狀態

實際上,您可以將session_id和session_start用于此目的.$ids [135b29ef958a23418f2a804474787305, // active session135b29ef958a23418f2a804474787306, // inactive session135b29ef958a23418f2a804474787305, // active session];foreach($ids as $id){session_id($id);sess…

c++ python混合編程 restful_簡單上手nodejs調用c++(c++和js的混合編程)

因為項目的原因,最近經常使用node.js搭RESTful接口。性能還是很不錯啦,感覺比Spring Boot之類的要快。而且在不錯的性能之外,只要程序結構組織好,別讓太多的回調把程序結構搞亂,整體開發效率比Java快的就太多了。如果想…

電腦掃描二維碼_線上分享 | 網絡工作坊:平板電腦工作術

澳門生產力暨科技轉移中心將于9月29日下午3時,舉辦資訊科技工具應用線上工作坊,講解平板電腦辦公應用,歡迎有興趣人士報名,名額有限,先到先得。該中心早前已舉辦是次主題的應用工作坊,坊間反應積極&#xf…

java bean 轉json 串,終于找到了一篇能看懂的如何把javabean轉換成json字符串的文章,嘿嘿,分享一下!...

學會了在j2ee中使用ajax后,有時候從服務器返回客戶端的數據是對象,自己手動拼湊json字符串容易出錯,通過谷歌知道了json-lib這個類庫,方便的支持java中對象到json字符串的轉化。看source-forge的json-lib介紹說,需要jakarta commo…

數據庫設置_CentOS7 - 設置MySQL數據庫

設置MySQL數據庫本文介紹如何在CentOS上執行流行的MySQL數據庫服務器的基本安裝。 MySQL是當今使用最廣泛的數據庫系統,它可以在許多不同的行業中找到,為動態網站和大型數據倉庫等各種產品提供數據存儲。準備此配方要求CentOS系統具有有效的網絡連接和管…

提出離職后怎么定last day_不管你因為什么離職,用正規的離職方式是你最正確的選擇!...

#不管你是因為什么離職,用正規的離職方式離職是你最正確的選擇,如果因為不恰當的方式造成與公司的矛盾,可能讓你今后會非常被動。書面離職是最具有法律效力的,按照勞動法,你有權在提出正式離職一個月后走人&#xff0c…

mqtt php 16進制數據,phpMQTT 內存耗死問題

場景:(訂閱)鏈接不上mqtt的時候,一下代碼會出錯:function read($int 8192, $nb false){// print_r(socket_get_status($this->socket));$string"";$togo $int;if($nb){return fread($this->socket, $togo);}// var_dump($this->so…

人臉識別代碼_10行代碼實現人臉識別

什么是人臉識別人臉識別,是基于人的臉部特征信息進行身份識別的一種生物識別技術。用攝像機或攝像頭采集含有人臉的圖像或視頻流,并自動在圖像中檢測和跟蹤人臉,進而對檢測到的人臉進行臉部識別的一系列相關技術,通常也叫做人像識…