ElasticSearch 文檔的增刪改查都不會(huì)?

本文主要是介紹 ElasticSearch 的文檔增刪改查和批量操作霸奕,同時(shí)會(huì)介紹一些 REST API 返回狀態(tài)碼的具體含義。

我們先來看下這個(gè)表:

image

這個(gè)表包含了 Index吉拳、Create质帅、Read、Update留攒、Delete 這五種方法煤惩,我們先來看下 CRUD 操作的 HTTP 請(qǐng)求都長(zhǎng)什么樣子?

首先是提供一個(gè) HTTP 的 method炼邀,后面是索引名字魄揉,在 7.0 之后所以的 Type 都用 _doc 表示,后面是文檔 id拭宁。

再簡(jiǎn)單了解了 CURD 操作的 HTTP 請(qǐng)求后洛退,那么讓我們先來了解下如何創(chuàng)建文檔:

創(chuàng)建文檔

image

Create 支持兩種方式瓣俯,一種是指定文檔 id 創(chuàng)建文檔,像上面這張圖就是兵怯;另一種是通過調(diào)用 post /users/_doc 去讓 ES 自動(dòng)生成文檔 id彩匕。

自己指定文檔 id創(chuàng)建文檔,需要考慮 id 的均衡性摇零,避免產(chǎn)生分配不均衡的問題推掸。
ES 的 hash 函數(shù)會(huì)確保文檔 id 被均勻分配到不同的分片。

當(dāng)我們執(zhí)行剛才的命令驻仅,可以返回如下結(jié)果:

image

其中 _version 每一次操作谅畅,都會(huì) + 1,它是一個(gè)鎖的機(jī)制噪服,當(dāng)并行修改文檔的時(shí)候毡泻,更新的版本號(hào)比文檔當(dāng)前的版本號(hào)小時(shí)就會(huì)報(bào)錯(cuò),不允許做修改粘优。

創(chuàng)建文檔時(shí)仇味,如果索引不存在,ES 會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的 index 和 type雹顺。

接下來看下另一種創(chuàng)建文檔的方式丹墨,不指定 id 創(chuàng)建文檔,HTTP 請(qǐng)求也變?yōu)榱?POST嬉愧,具體的請(qǐng)求如下:

image

返回的結(jié)果如下:

image

Index 和 Create 區(qū)別為:如果文檔不存在贩挣,就索引新的文檔,否則現(xiàn)有文檔就會(huì)被刪除没酣,新的文檔被索引王财,版本信息 _version + 1。

查詢文檔

Get 方法比較簡(jiǎn)單裕便,只需要 Get 索引名稱/_doc/文檔 id绒净,通過執(zhí)行這個(gè)命令就可以知道文檔的具體信息了。

image

當(dāng)執(zhí)行這條語句后會(huì)返回 HTTP 200偿衰,具體返回結(jié)果如下:

image

其中 _index 為索引挂疆,_type 為類型,_id 為文檔 id下翎,_version 為版本信息缤言,_source 存儲(chǔ)了文檔的完整原始數(shù)據(jù)。

當(dāng)查詢的文檔 id 不存在的時(shí)候漏设,會(huì)返回 HTTP 404墨闲,且 foundfalse,具體結(jié)果如下:

image

更新文檔

Update 方法采用 HTTP POST郑口,在請(qǐng)求體中必須指明 doc鸳碧,在把具體文檔提供在 HTTP 的 body 里盾鳞。Update 和 Index 方法不同,Update 方法不會(huì)刪除原來的文檔瞻离,而是實(shí)現(xiàn)真正的數(shù)據(jù)更新腾仅。

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

image

執(zhí)行后套利,版本信息 _version + 1推励,讓我們?cè)偃ゲ樵兿略撐臋n:

image

可以看到,新增字段已經(jīng)成功了肉迫。

刪除文檔

Delete 方法也很簡(jiǎn)單验辞,Delete 索引名稱/_doc/文檔 id 就可以了,再這里就不再做代碼演示了喊衫。

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

Bulk API

在一個(gè) REST 請(qǐng)求中,重新建立網(wǎng)絡(luò)開銷是十分損耗性能的族购,因此 ES 提供 Bulk API壳贪,支持在一次 API 調(diào)用中,對(duì)不同的索引進(jìn)行操作寝杖,從而減少網(wǎng)絡(luò)傳輸開銷违施,提升寫入速率。

它支持 Index瑟幕、Create磕蒲、UpdateDelete 四種類型操作收苏,可以在 URI 中指定索引亿卤,也可以在請(qǐng)求的方法體中進(jìn)行愤兵。

同時(shí)多條操作中如果其中有一條失敗鹿霸,也不會(huì)影響其他的操作,并且返回的結(jié)果包括每一條操作執(zhí)行的結(jié)果秆乳。

比如輸入如下代碼:

image

當(dāng)我們執(zhí)行命令后懦鼠,結(jié)果如下:

image

took 表示消耗了 93 毫秒,errorstrue 表示在這些操作中錯(cuò)誤發(fā)生屹堰,發(fā)現(xiàn)是 update 操作發(fā)生了錯(cuò)誤肛冶,id 為 2 的文檔不存在,所以報(bào)錯(cuò)了扯键。

在使用 Bulk API 的時(shí)候睦袖,當(dāng) errorstrue 時(shí),需要把錯(cuò)誤的操作修改掉荣刑,防止存到 ES 的數(shù)據(jù)有缺失馅笙。

批量查詢文檔

批量查詢需要指明要查詢文檔的 id伦乔,可以在一個(gè) _mget 操作里查詢不同索引的數(shù)據(jù),可以減少網(wǎng)絡(luò)連接所產(chǎn)生的開銷董习,提高性能烈和。

下面我們來實(shí)際操作下,輸入以下代碼執(zhí)行皿淋,就可以得到文檔 id 為 1,3 的數(shù)據(jù)招刹。

image

運(yùn)行結(jié)果如下:

image

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

REST API 常見錯(cuò)誤返回

剛才在演示中疯暑,當(dāng)查詢文檔 id 不存在的時(shí)候就會(huì)報(bào) 404 錯(cuò)誤,而且 ES 還有各種各樣的返回哑舒,下面通過一個(gè)表格了解下:

image

總結(jié)

本文主要介紹了文檔的 CRUD 操作缰儿,還有 Bulk API、_mget API散址,這些批量操作可以提高 API 調(diào)用性能乖阵,但是不要一次發(fā)送過多數(shù)據(jù),也有可能會(huì)對(duì) ES 集群產(chǎn)生過大的壓力预麸,導(dǎo)致性能有所下降瞪浸。一般建議是 1000-5000 個(gè)文檔,如果你的文檔很大吏祸,可以適當(dāng)減少隊(duì)列对蒲,大小建議是 5-15 MB,默認(rèn)不能超過 100 M贡翘。

參考文獻(xiàn)

Elastic Stack從入門到實(shí)踐

Elasticsearch頂尖高手系列

Elasticsearch核心技術(shù)與實(shí)戰(zhàn)

https://www.elastic.co/guide/en/elasticsearch/reference/7.1/docs-index_.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蹈矮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸣驱,更是在濱河造成了極大的恐慌泛鸟,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踊东,死亡現(xiàn)場(chǎng)離奇詭異北滥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)闸翅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門再芋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坚冀,你說我怎么就攤上這事济赎。” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵司训,是天一觀的道長(zhǎng)华蜒。 經(jīng)常有香客問我,道長(zhǎng)豁遭,這世上最難降的妖魔是什么叭喜? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮蓖谢,結(jié)果婚禮上捂蕴,老公的妹妹穿的比我還像新娘。我一直安慰自己闪幽,他們只是感情好啥辨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盯腌,像睡著了一般溉知。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腕够,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天级乍,我揣著相機(jī)與錄音,去河邊找鬼帚湘。 笑死玫荣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的大诸。 我是一名探鬼主播捅厂,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼资柔!你這毒婦竟也來了焙贷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤贿堰,失蹤者是張志新(化名)和其女友劉穎辙芍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體官边,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沸手,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年外遇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了注簿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跳仿,死狀恐怖诡渴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤妄辩,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布惑灵,位于F島的核電站,受9級(jí)特大地震影響眼耀,放射性物質(zhì)發(fā)生泄漏英支。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一哮伟、第九天 我趴在偏房一處隱蔽的房頂上張望干花。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至湿硝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尤慰。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雷蹂,地道東北人割择。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像萎河,于是被迫代替她去往敵國(guó)和親荔泳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容