Elasticsearch數(shù)據(jù)更新API

  • 簡(jiǎn)單字段更新
  • 使用腳本按條件更新
  • 使用更新api創(chuàng)建或刪除文檔

歡迎訪問本人博客:http://wangnan.tech

為什么我們無法真的更新索引中的文檔

在索引一個(gè)新文檔的時(shí)候,lucene會(huì)對(duì)每個(gè)字段進(jìn)行分析并產(chǎn)生詞條流,詞條流中的詞條可以會(huì)經(jīng)過過濾器的額外處理,而沒有過濾掉的詞條會(huì)寫入倒排索引中,索引過程中,一些不需要的信息可能被拋棄,這些信息包括:

  • 某些特殊的詞條位置(當(dāng)詞向量沒有儲(chǔ)存時(shí))
  • 特定詞匯(停用詞或同義詞)
  • 詞條的變形(如詞干還原)

因此我們無法更新索引中的文檔,而且每次修改時(shí)不得不向索引發(fā)送文檔所有字段數(shù)據(jù)

_source

elasticsearch可以通過使用_source偽字段儲(chǔ)存和檢索文檔的原始數(shù)據(jù)來解決這個(gè)問題,當(dāng)用戶需要更改文檔時(shí),elasticsearch會(huì)獲取_soucre字段中的值,做相應(yīng)的修改,然后向索引提交一個(gè)新文檔,替換老文檔

為了使得這個(gè)特征起效,_source字段必須是可用的

局限

更新命令的一個(gè)很大的局限就是它只能更新單個(gè)文檔,目前還不支持通過查詢實(shí)現(xiàn)批量更新

更新api

文檔更新可以通過執(zhí)行發(fā)送至端點(diǎn)的更新請(qǐng)求來實(shí)現(xiàn),也可以通過在更新請(qǐng)求的url中添加_update參數(shù)來更新某個(gè)特定的文檔

比如 /library/book/_update

本文其余部分都將使用下面命令索引的文檔:

簡(jiǎn)單字段更新

使用下面命令

curl -XPOST localhost:9200/library/book/1/_update -d'{
    "doc":{
        "title":"The Complete Sherlock Homes Book"
        "year":1935
    }
}

作為響應(yīng),elasticsearch將返回一個(gè)與建索引操作類似的回復(fù):

{"ok":true,"_index":"library","_type":"book","_id":"1","_version"2}

現(xiàn)在,如果我們想從索引獲取剛才修改的文檔是否被修改了,可以執(zhí)行下面的命令:

curl -xGET localhost:9200/library/book/1?pretty

改命令響應(yīng)如下:

可以看到_source字段中的值已經(jīng)被修改了

使用腳本按條件更新

有時(shí)候在修改文檔的時(shí)候添加一些額外的邏輯是很有好處的
例如我們發(fā)送下面的請(qǐng)求:

03.png

ctx變量來引用源文檔

使用更新api創(chuàng)建或刪除文檔

更新api不僅僅可以修改文檔,也可以用來操作整個(gè)文檔

upsert屬性允許用戶在當(dāng)url中地址不存在時(shí)創(chuàng)建一個(gè)新文檔
查看下面命令:

該命令修改了某個(gè)已有的文檔year字段,如果文檔不存在,將會(huì)創(chuàng)建一個(gè)文檔,并且該文檔會(huì)創(chuàng)建一個(gè)新字段title

前面的命令還可以使用腳本重寫為以下形式

有條件的移除整個(gè)文檔:

(注:內(nèi)容整理自《深入理解Elasticsearch》)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 博客原文一博客原文二 翻譯作品,水平有限,如有錯(cuò)誤,煩請(qǐng)留言指正。原文請(qǐng)見 官網(wǎng)英文文檔 起步 Elasticse...
    rabbitGYK閱讀 3,401評(píng)論 0 68
  • 基礎(chǔ)概念 Elasticsearch有幾個(gè)核心概念,從一開始理解這些概念會(huì)對(duì)整個(gè)學(xué)習(xí)過程有莫大的幫助。 接近實(shí)時(shí)(...
    山天大畜閱讀 2,166評(píng)論 0 4
  • 文檔元數(shù)據(jù) 一個(gè)文檔不僅僅包含它的數(shù)據(jù) ,也包含 元數(shù)據(jù) —— 有關(guān) 文檔的信息。 三個(gè)必須的元數(shù)據(jù)元素如下: _...
    techhow閱讀 675評(píng)論 0 0
  • 獲取索引的mapping 實(shí)例: 測(cè)試分析器 創(chuàng)建一個(gè)索引 到目前為止, 我們已經(jīng)通過索引一篇文檔創(chuàng)建了一個(gè)新的索...
    M醉逍遙閱讀 1,128評(píng)論 0 1
  • 至少南風(fēng)依舊歌唱 七月依然在野 遙遠(yuǎn)的盛夏 心頭浮掠的光影 回憶一千零一次 夢(mèng)中的童謠飄遠(yuǎn) 窗欞下鳴叫的知了 麻衣...
    別忘記別回憶閱讀 256評(píng)論 0 1

友情鏈接更多精彩內(nèi)容