0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python 更新 Elasticsearch 的幾種方法

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-01 10:11 ? 次閱讀

今天總結一下通過 Python 更新 Elasticsearch 數(shù)據(jù)的幾個方法

Elasticsearch 是一個實時的分布式搜索分析引擎,它能讓你以前所未有的速度和規(guī)模,去探索你的數(shù)據(jù)。它被用作全文檢索、結構化搜索、分析以及這三個功能的組合

全局更新

在 Elasticsearch 中,通過指定文檔的 _id, 使用 Elasticsearch 自帶的 index api 可以實現(xiàn)插入一條 document , 如果該 _id 已存在,將直接更新該 document

因此,通過 index API 來對已有的文檔實現(xiàn)更新,其實是進行了一次 reindex 的操作 如 ES 中已有數(shù)據(jù)如下

圖片

通過代碼將其更新:

es.index(index="test", doc_type="doc", id="dfebcXcBCWwWKoXwQ2Gk", body={
            "name": "Python編程實戰(zhàn)",
            "num": 5})

修改后結果

圖片

通過這種方法修改,因為是 reindex 過程,所以當數(shù)據(jù)量或者 document 很大的時候,效率非常的低

局部更新

update

Elasticsearch 中的 update API 支持根據(jù)用戶提供的腳本去實現(xiàn)更新

Update 更新操作允許 ES 獲得某個指定的文檔,可以通過腳本等操作對該文檔進行更新。

可以把它看成是先刪除再索引的原子操作,只是省略了返回的過程,這樣即節(jié)省了來回傳輸?shù)?a target="_blank">網(wǎng)絡流量,也避免了中間時間造成的文檔修改沖突。

在 Python 中可以直接通過包裝好的接口來更新

es.update(index="test", doc_type="doc", id="4Z6XcXcBChYTHL1ZdwjL", body={"doc": {"name": "Jerry"}})

注意 body 參數(shù),我們需要添加 doc 或者 script 變量來指定修改的內容

增加字段:

es.update(index="test", doc_type="doc", id="4Z6XcXcBChYTHL1ZdwjL", body={"doc": {"name": "Jerry", "age": 25}})

運行完之后,在 kibana 上查看結果

圖片

搜索更新

update_by_query

update_by_query,顧名思義,這種更新方式,即通過查詢再更新。

該方法的優(yōu)點是可以指定某些數(shù)據(jù),然后達到更新的目的

在 ES 中,我們通過 update_by_query 中的 query 和 script 來實現(xiàn)先查詢再更新的機制

圖片

在上面的操作中:query 字段,表示我們要查詢的條件,根據(jù)該條件找到對應的數(shù)據(jù) script 字段包含以下關鍵字:

  • source 是將要執(zhí)行的腳本內容;
  • lang 表示的是當前腳本的語言*;
  • param 則是腳本執(zhí)行的參數(shù);

參考詳情:https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-scripting-painless.html

批量更新

在實際需求中,面對最多的還是批量更新

當然你也可以通過 for 循環(huán)一條一條來更新,不過這種方法效率太低了。

尤其是面對數(shù)據(jù)量很大的時候,那真的是急死人..

好在 ES 有提供批量操作的接口 bulk

在 Python 中可以直接導入使用

from elasticsearch.helpers import bulk

那么在 bulk 中如何使用 update 呢?請看代碼

actions = []
  for item in data_list:
     _id = item.get("_id")
     doc = item.get("doc")
     index_action = {
            '_op_type': 'update',
            '_index': index_name,
            '_type': "doc",
            '_id': _id,
            'doc': doc
     }
     actions.append(index_action)

 if actions:
     bulk(es, actions)

可以看到有個 doc 的參數(shù),和上面介紹的 update 方法類似,doc中的值便是我們需要修改的字段內容

_op_type 為操作類型為update,表明是更新的操作

以該種方式組合的 index_action 組成數(shù)組,通過 bulk 便能實現(xiàn)批量更新 !

以上便是通過 Python 更新 Elasticsearch 的幾種方法。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)

    關注

    8

    文章

    6808

    瀏覽量

    88743
  • 代碼
    +關注

    關注

    30

    文章

    4722

    瀏覽量

    68234
  • python
    +關注

    關注

    55

    文章

    4767

    瀏覽量

    84375
  • Elasticsearch
    +關注

    關注

    0

    文章

    26

    瀏覽量

    2816
收藏 人收藏

    評論

    相關推薦

    Python字符串的特點和修改字符串的常見四種方法

    Python中修改字符串的幾種方法
    發(fā)表于 02-26 16:52

    ElasticSearch引擎的文檔更新

    ElasticSearch查詢 第二篇:文檔更新
    發(fā)表于 04-24 07:55

    寄存器更新幾種方法介紹

    2 處理器模型2.5 寄存器2.5.3 寄存器更新幾種方法可以用來更新寄存器。通常,當使用指令更新寄存器時沒有特殊的限制。但是使用下面的指令更新
    發(fā)表于 12-09 07:29

    抖動測量的幾種方法

    抖動測量的幾種方法 測試抖動常用在測試數(shù)據(jù)通信IC或測試電信網(wǎng)絡中。抖動是應該呈現(xiàn)的數(shù)字信號沿與實際存在
    發(fā)表于 08-17 13:02 ?3085次閱讀

    電磁兼容性整改的幾種方法

    電磁兼容性整改的幾種方法,這些方法不僅節(jié)約成本,而且是最有效的整改方法。
    發(fā)表于 10-28 14:56 ?9次下載

    調試Python程序代碼的幾種方法總結

    本文主要介紹了調試Python程序代碼的幾種方法總結。第一種方法簡單直接粗暴有效,就是用print把可能有問題的變量打印出來看看。凡是用print來輔助查看的地方,都可以用斷言(assert)來替代
    發(fā)表于 01-14 11:22 ?4251次閱讀
    調試<b class='flag-5'>Python</b>程序代碼的<b class='flag-5'>幾種方法</b>總結

    (純干貨)使用STM32測量頻率和占空比的幾種方法

    本文詳細介紹了使用STM32測量頻率和占空比的幾種方法
    的頭像 發(fā)表于 03-13 15:43 ?4.3w次閱讀
    (純干貨)使用STM32測量頻率和占空比的<b class='flag-5'>幾種方法</b>

    干貨:計算fibnacci 級數(shù)的幾種方法

    干貨:計算fibnacci 級數(shù)的幾種方法
    的頭像 發(fā)表于 06-22 11:23 ?2383次閱讀
    干貨:計算fibnacci 級數(shù)的<b class='flag-5'>幾種方法</b>

    虛擬機:Linux查看路由信息的幾種方法

    虛擬機:Linux查看路由信息的幾種方法
    的頭像 發(fā)表于 06-22 15:24 ?8256次閱讀
    虛擬機:Linux查看路由信息的<b class='flag-5'>幾種方法</b>

    python統(tǒng)計詞頻的三種方法

    python統(tǒng)計詞頻的三種方法方法。
    發(fā)表于 05-25 14:33 ?2次下載

    軸承孔磨損維修有哪幾種方法

    軸承孔磨損維修有哪幾種方法?
    發(fā)表于 04-01 16:30 ?11次下載

    Docker鏡像國內加速的幾種方法

    在國內,拉取 Docker 鏡像速度慢/時不時斷線/無賬號導致限流等,比較痛苦. 這里提供加速/優(yōu)化的幾種方法
    的頭像 發(fā)表于 10-19 10:02 ?1w次閱讀
    Docker鏡像國內加速的<b class='flag-5'>幾種方法</b>

    單片機軟件濾波的幾種方法

    電子發(fā)燒友網(wǎng)站提供《單片機軟件濾波的幾種方法.pdf》資料免費下載
    發(fā)表于 10-20 15:09 ?2次下載
    單片機軟件濾波的<b class='flag-5'>幾種方法</b>

    開關電源輸出紋波抑制的幾種方法

    電子發(fā)燒友網(wǎng)站提供《開關電源輸出紋波抑制的幾種方法.doc》資料免費下載
    發(fā)表于 11-15 09:11 ?0次下載
    開關電源輸出紋波抑制的<b class='flag-5'>幾種方法</b>

    運行Python程序的幾種常見方法

    Python是一種高級編程語言,具有簡單易學,易于閱讀和調試的特點。當你完成了一個Python程序之后,你需要運行它以檢查程序是否按照預期工作。下面是運行Python程序的幾種常見
    的頭像 發(fā)表于 11-28 15:32 ?2321次閱讀