Python更新Elasticsearch数据方法大全

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: Python更新Elasticsearch数据方法大全

640.jpg

大家好,我是村长

今天总结一下通过 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 的几种方法

个人推荐通过 update 接口或者 bulk 批量来做更新,你学废了吗?

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
1月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
1137 1
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
323 1
|
1月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
372 0
|
1月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
1月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
124 2
|
2月前
|
存储 监控 API
Python实战:跨平台电商数据聚合系统的技术实现
本文介绍如何通过标准化API调用协议,实现淘宝、京东、拼多多等电商平台的商品数据自动化采集、清洗与存储。内容涵盖技术架构设计、Python代码示例及高阶应用(如价格监控系统),提供可直接落地的技术方案,帮助开发者解决多平台数据同步难题。
|
2月前
|
存储 JSON 算法
Python集合:高效处理无序唯一数据的利器
Python集合是一种高效的数据结构,具备自动去重、快速成员检测和无序性等特点,适用于数据去重、集合运算和性能优化等场景。本文通过实例详解其用法与技巧。
130 0
|
2月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
388 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
2月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。

热门文章

最新文章

推荐镜像

更多