0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python 更新 Elasticsearch 的几种方法

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-01 10:11 次阅读

今天总结一下通过 Python 更新 Elasticsearch 数据的几个方法

Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。它被用作全文检索、结构化搜索、分析以及这三个功能的组合

全局更新

在 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})

修改后结果

图片

通过这种方法修改,因为是 reindex 过程,所以当数据量或者 document 很大的时候,效率非常的低

局部更新

update

Elasticsearch 中的 update API 支持根据用户提供的脚本去实现更新

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 的几种方法。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7015

    浏览量

    88989
  • 代码
    +关注

    关注

    30

    文章

    4786

    浏览量

    68557
  • python
    +关注

    关注

    56

    文章

    4795

    浏览量

    84658
  • Elasticsearch
    +关注

    关注

    0

    文章

    28

    浏览量

    2828
收藏 人收藏

    评论

    相关推荐

    Python字符串的特点和修改字符串的常见四种方法

    Python中修改字符串的几种方法
    发表于 02-26 16:52

    ElasticSearch引擎的文档更新

    ElasticSearch查询 第二篇:文档更新
    发表于 04-24 07:55

    寄存器更新几种方法介绍

    2 处理器模型2.5 寄存器2.5.3 寄存器更新几种方法可以用来更新寄存器。通常,当使用指令更新寄存器时没有特殊的限制。但是使用下面的指令更新
    发表于 12-09 07:29

    抖动测量的几种方法

    抖动测量的几种方法 测试抖动常用在测试数据通信IC或测试电信网络中。抖动是应该呈现的数字信号沿与实际存在
    发表于 08-17 13:02 3110次阅读

    电磁兼容性整改的几种方法

    电磁兼容性整改的几种方法,这些方法不仅节约成本,而且是最有效的整改方法
    发表于 10-28 14:56 9次下载

    调试Python程序代码的几种方法总结

    本文主要介绍了调试Python程序代码的几种方法总结。第一种方法简单直接粗暴有效,就是用print把可能有问题的变量打印出来看看。凡是用print来辅助查看的地方,都可以用断言(assert)来替代
    发表于 01-14 11:22 4284次阅读
    调试<b class='flag-5'>Python</b>程序代码的<b class='flag-5'>几种方法</b>总结

    (纯干货)使用STM32测量频率和占空比的几种方法

    本文详细介绍了使用STM32测量频率和占空比的几种方法
    的头像 发表于 03-13 15:43 4.3w次阅读
    (纯干货)使用STM32测量频率和占空比的<b class='flag-5'>几种方法</b>

    干货:计算fibnacci 级数的几种方法

    干货:计算fibnacci 级数的几种方法
    的头像 发表于 06-22 11:23 2421次阅读
    干货:计算fibnacci 级数的<b class='flag-5'>几种方法</b>

    虚拟机:Linux查看路由信息的几种方法

    虚拟机:Linux查看路由信息的几种方法
    的头像 发表于 06-22 15:24 8344次阅读
    虚拟机:Linux查看路由信息的<b class='flag-5'>几种方法</b>

    python统计词频的三种方法

    python统计词频的三种方法方法
    发表于 05-25 14:33 2次下载

    轴承孔磨损维修有哪几种方法

    轴承孔磨损维修有哪几种方法
    发表于 04-01 16:30 11次下载

    Docker镜像国内加速的几种方法

    在国内,拉取 Docker 镜像速度慢/时不时断线/无账号导致限流等,比较痛苦. 这里提供加速/优化的几种方法
    的头像 发表于 10-19 10:02 1.1w次阅读
    Docker镜像国内加速的<b class='flag-5'>几种方法</b>

    单片机软件滤波的几种方法

    电子发烧友网站提供《单片机软件滤波的几种方法.pdf》资料免费下载
    发表于 10-20 15:09 2次下载
    单片机软件滤波的<b class='flag-5'>几种方法</b>

    开关电源输出纹波抑制的几种方法

    电子发烧友网站提供《开关电源输出纹波抑制的几种方法.doc》资料免费下载
    发表于 11-15 09:11 4次下载
    开关电源输出纹波抑制的<b class='flag-5'>几种方法</b>

    运行Python程序的几种常见方法

    Python是一种高级编程语言,具有简单易学,易于阅读和调试的特点。当你完成了一个Python程序之后,你需要运行它以检查程序是否按照预期工作。下面是运行Python程序的几种常见
    的头像 发表于 11-28 15:32 2543次阅读