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

    文章

    6512

    浏览量

    87601
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66784
  • python
    +关注

    关注

    51

    文章

    4677

    浏览量

    83468
  • Elasticsearch
    +关注

    关注

    0

    文章

    25

    浏览量

    2788
收藏 人收藏

    评论

    相关推荐

    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 2944次阅读

    消除日光灯噪声的几种方法

    消除日光灯噪声的几种方法日光灯使用长久或装配不良容易出现噪声,发出嗡嗡的响声。对人们的生活及人的神经系统产生不良影响。
    发表于 03-29 08:23 1743次阅读

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

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

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

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

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

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

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

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

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

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

    python统计词频的三种方法

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

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

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

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

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

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

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

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

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