ES中partial update實現(xiàn)沐绒、groovy腳本進行partial update與partial update樂觀鎖并發(fā)控制

1、什么是partial update旺坠?

  • 如果使用 PUT /index/type/id 這樣的方式進行創(chuàng)建文檔和替換文檔乔遮,就是一樣的語法。
  • 一般對應(yīng)到應(yīng)用程序中取刃,每次的執(zhí)行流程基本是這樣的:

(1)應(yīng)用程序先發(fā)起一個get請求蹋肮,獲取到document,展示到前臺界面璧疗,供用戶查看和修改
(2)用戶在前臺界面修改數(shù)據(jù)坯辩,發(fā)送到后臺
(3)后臺代碼,會將用戶修改的數(shù)據(jù)在內(nèi)存中進行執(zhí)行崩侠,然后封裝好修改后的全量數(shù)據(jù)
(4)然后發(fā)送PUT請求漆魔,到es中,進行全量替換
(5)es將老的document標記為deleted,然后重新創(chuàng)建一個新的document

partial update則是使用POST方式進行修改

post /index/type/id/_update 
{
   "doc": {
      "要修改的少數(shù)幾個field即可改抡,不需要全量的數(shù)據(jù)"
   }
}

看起來矢炼,好像就比較方便了,每次就傳遞少數(shù)幾個發(fā)生修改的field即可阿纤,不需要將全量的document數(shù)據(jù)發(fā)送過去

2句灌、圖解partial update實現(xiàn)原理以及其優(yōu)點

圖解partial update實現(xiàn)原理以及其優(yōu)點

3. 實戰(zhàn)演練

#全量替換
PUT /test_index/test_type/10
{
  "test_field1": "test1",
  "test_field2": "test2"
}
#partial update
POST /test_index/test_type/10/_update
{
  "doc": {
    "test_field2":"updated test2"
  }
}

4. 基于groovy腳本執(zhí)行partial update

es中其實是有個內(nèi)置的腳本支持的,可以基于groovy腳本實現(xiàn)各種各樣的復(fù)雜操作欠拾,這里介紹基于groovy腳本胰锌,如何執(zhí)行partial update

  • 首先創(chuàng)建出一條數(shù)據(jù)
PUT /test_index/test_type/11
{
  "num":0,
  "tags":[]
}

(1)內(nèi)置腳本

POST /test_index/test_type/11/_update
{
  "script": "ctx._source.num+=1"
}
#查詢
GET /test_index/test_type/11
#返回
{
  "_index": "test_index",
  "_type": "test_type",
  "_id": "11",
  "_version": 2,
  "found": true,
  "_source": {
    "num": 1,
    "tags": []
  }
}

(2)外置腳本

在es安裝目錄下的config文件下的scripts文件新建一個腳本文件: test-add-tags.groovy

#在test-add-tags.groovy文件中添加以下內(nèi)容
ctx._source.tags+=new_tag
  • 然后在kibana控制臺中進行測試
#運行腳本文件
POST /test_index/test_type/11/_update
{
  "script": {
    "lang": "groovy", 
    "file": "test-add-tags",
    "params": {
      "new_tag":"tag1"
    }
  }
}
#查詢
GET /test_index/test_type/11
#返回
{
  "_index": "test_index",
  "_type": "test_type",
  "_id": "11",
  "_version": 3,
  "found": true,
  "_source": {
    "num": 1,
    "tags": [
      "tag1"
    ]
  }
}

(3)用腳本刪除文檔

新建一個 test-delete-document.groovy 腳本文件,并添加以下內(nèi)容

ctx.op = ctx._source.num == count ? 'delete' : 'none'
  • 然后在kibana控制臺中進行測試
#運行腳本文件
POST /test_index/test_type/11/_update
{
  "script": {
    "lang": "groovy",
    "file": "test-delete-document",
    "params": {
      "count":1
    }
  }
}
#查詢
GET /test_index/test_type/11
#返回
{
  "_index": "test_index",
  "_type": "test_type",
  "_id": "11",
  "found": false
}

(4)upsert操作

如果在執(zhí)行修改的情況下該document已經(jīng)不存在了清蚀,就執(zhí)行upsert中的初始化操作匕荸;如果指定的document存在,就執(zhí)行doc或者script指定的partial update操作

POST /test_index/test_type/11/_update
{
  "script": "ctx._source.num+=1",
  "upsert": {
    "num":0,
    "tags":[]
  }
}
#查詢
GET /test_index/test_type/11
#返回
{
  "_index": "test_index",
  "_type": "test_type",
  "_id": "11",
  "_version": 1,
  "found": true,
  "_source": {
    "num": 0,
    "tags": []
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枷邪,一起剝皮案震驚了整個濱河市榛搔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌东揣,老刑警劉巖践惑,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘶卧,居然都是意外死亡尔觉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門芥吟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侦铜,“玉大人,你說我怎么就攤上這事钟鸵《ど裕” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵棺耍,是天一觀的道長贡未。 經(jīng)常有香客問我,道長蒙袍,這世上最難降的妖魔是什么俊卤? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮害幅,結(jié)果婚禮上消恍,老公的妹妹穿的比我還像新娘。我一直安慰自己以现,他們只是感情好狠怨,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布佩抹。 她就那樣靜靜地躺著,像睡著了一般取董。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上无宿,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天茵汰,我揣著相機與錄音,去河邊找鬼孽鸡。 笑死蹂午,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的彬碱。 我是一名探鬼主播豆胸,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巷疼!你這毒婦竟也來了晚胡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤嚼沿,失蹤者是張志新(化名)和其女友劉穎估盘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骡尽,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡遣妥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了攀细。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箫踩。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谭贪,靈堂內(nèi)的尸體忽然破棺而出境钟,到底是詐尸還是另有隱情,我是刑警寧澤故河,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布吱韭,位于F島的核電站,受9級特大地震影響鱼的,放射性物質(zhì)發(fā)生泄漏理盆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一凑阶、第九天 我趴在偏房一處隱蔽的房頂上張望猿规。 院中可真熱鬧,春花似錦宙橱、人聲如沸姨俩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽环葵。三九已至调窍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間张遭,已是汗流浹背邓萨。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留菊卷,地道東北人缔恳。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像洁闰,于是被迫代替她去往敵國和親歉甚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

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