Python更新Elasticsearch數據方法大全

你們好,我是村長html

今天總結一下經過 Python 更新 Elasticsearch 數據的幾個方法編程

Elasticsearch 是一個實時的分佈式搜索分析引擎,它能讓你之前所未有的速度和規模,去探索你的數據。它被用做全文檢索、結構化搜索、分析以及這三個功能的組合api

全局更新

在 Elasticsearch 中,經過指定文檔的 _id, 使用 Elasticsearch 自帶的 index api 能夠實現插入一條 document , 若是該 _id 已存在,將直接更新該 document數組

所以,經過 index API 來對已有的文檔實現更新,實際上是進行了一次 reindex 的操做 如 ES 中已有數據以下微信

經過代碼將其更新:網絡

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

修改後結果app

經過這種方法修改,由於是 reindex 過程,因此當數據量或者 document 很大的時候,效率很是的低less

局部更新

update

Elasticsearch 中的 update API 支持根據用戶提供的腳本去實現更新elasticsearch

Update 更新操做容許 ES 得到某個指定的文檔,能夠經過腳本等操做對該文檔進行更新。分佈式

能夠把它當作是先刪除再索引的原子操做,只是省略了返回的過程,這樣即節省了來回傳輸的網絡流量,也避免了中間時間形成的文檔修改衝突。

在 Python 中能夠直接經過包裝好的接口來更新

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

注意 body 參數,咱們須要添加 doc 或者 script 變量來指定修改的內容

增長字段:

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

運行完以後,在 kibana 上查看結果

搜索更新

update_by_query

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

該方法的優勢是能夠指定某些數據,而後達到更新的目的

在 ES 中,咱們經過 update_by_query 中的 query 和 script 來實現先查詢再更新的機制

在上面的操做中:query 字段,表示咱們要查詢的條件,根據該條件找到對應的數據 script 字段包含如下關鍵字:

  • source 是將要執行的腳本內容;

  • lang 表示的是當前腳本的語言*;

  • param 則是腳本執行的參數;

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

批量更新

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

固然你也能夠經過 for 循環一條一條來更新,不過這種方法效率過低了。

尤爲是面對數據量很大的時候,那真的是急死人..

好在 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 的參數,和上面介紹的 update 方法相似,doc中的值即是咱們須要修改的字段內容

_op_type 爲操做類型爲update,代表是更新的操做

以該種方式組合的 index_action 組成數組,經過 bulk 便能實現批量更新 !

以上即是經過 Python 更新 Elasticsearch 的幾種方法

我的推薦經過 update 接口或者 bulk 批量來作更新,你學廢了嗎?

推薦閱讀

手機最強Python編程神器,在手機上運行Python

 

Python高效代碼實踐:性能、內存和可用性

 

本文分享自微信公衆號 - Python編程與實戰(GoPy1024)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索