Python批量写入ES索引数据的示例代码

 更新时间:2024年02月28日 08:10:40   作者:1024点线面  
这篇文章主要为大家详细介绍了如何使用python脚本批量写ES数据(需要使用pip提前下载安装es依赖库),感兴趣的小伙伴可以学习一下

背景

由于使用官方性能压测工具esrally并不能随心所欲地控制创建索引的内容、索引的结构和数据量,无法创建指定的测试数据集,或者直接投入生产使用。使用java或者spark则需编译使用,修改麻烦,人生苦短,我用python。本文介绍使用python脚本批量写ES数据,需要使用pip提前下载安装es依赖库。

在线安装pip

这主要是为了安装python依赖。

wget [https://bootstrap.pypa.io/pip/2.7/get-pip.py](https://bootstrap.pypa.io/pip/2.7/get-pip.py)

python get-pip.py

[root@manager data]# pip --version

pip 20.3.4 from /usr/lib/python2.7/site-packages/pip (python 2.7)

pip install elasticsearch

Python脚本代码

数据实例如下图的效果:

代码全文如下(大多数字段的内容都会随机变化):

(注意,示例中大部分中文内容是为了增加存储使用量,否则100万条数据仅85MB,当前百万数据占用665MB,可酌情减少字段)

# coding: utf-8
from elasticsearch import Elasticsearch
from elasticsearch import helpers
import random
import time
import sys


reload(sys)
sys.setdefaultencoding('utf-8')
es = Elasticsearch(hosts='http://10.180.249.94:9200')
# print(es)

names = ['刘一', '陈二', '张三', '李四', '王五', '赵六', '孙七', '周八', '吴九', '郑十']
names2 = ['刘一没有曾用名', '陈二没有曾用名', '张三没有曾用名', '李四也没有曾用名啊', '王五没有曾用名', '赵六也没有曾用名']
sexs = ['男', '女']
subjects = ['语文', '数学', '英语', '生物', '地理','物理','化学','思想','历史']
grades = [85, 77, 96, 74, 85, 69, 84, 59, 67, 69, 86, 96, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86]
ages = [12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
likes = ['接天莲叶无穷碧','映日荷花别样红','不识庐山真面目','只缘身在此山中','两个黄鹂鸣翠柳','一行白鹭上青天','姑苏城外寒山寺','夜半钟声到客船','窗含西岭千秋雪','门泊东吴万里船']
webs = ['https://api.paugram.com/help/acgm','https://docs.tenapi.cn/img.html','https://api.mz-moe.cn/img.php','https://www.jinrishici.com/doc/#instance-right','https://www.bookmarkearth.com','https://www.yijianlogo.com/template']
datas = ['西风吹老洞庭波,一夜湘君白发多。醉后不知天在水,满船清梦压星河。','凿破苍苔地,偷他一片天。白云生镜里,明月落阶前。','春风倚棹阖闾城,水国春寒阴复晴。细雨湿衣看不见,闲花落地听无声。','日斜江上孤帆影,草绿湖南万里情。东道若逢相识问,青袍今日误儒生。','浪花有意千里雪,桃李无言一队春。一壶酒,一竿身,快活如侬有几人?','岸阔樯稀波渺茫,独凭危槛思何长。萧萧远树疏林外 ,一半秋山带夕阳。']
dates = ['2002-10-12-11:00:02','2022-12-12-15:18:09','2023-12-08-11:00:02','2022-11-22-16:01:01','2021-09-19-13:55:55','2019-11-11-15:07:06','2010-08-09-11:56:09','2023-06-18-01:06:01','2022-12-12-19:06:04','2023-10-15-16:13:02']

start = time.time()
# 开始批量写入es数据库
# 批量写入数据
for j in range(2000):
    print(j)
    action = [
        {
            "_index": "grades_v3",
            "_type": "_doc",
            "_id": i,
            "_source": {
                "id": i,
                "name": random.choice(names),
                "old_name": random.choice(names2),
                "sex": random.choice(sexs),
                "subject": random.choice(subjects),
                "grade": random.choice(grades),
                "ages": random.choice(ages),
                "likes": random.choice(likes),
                "likes2": random.choice(likes),
                "others2": random.choice(datas),
                "websites": random.choice(webs),
                "others": random.choice(likes),
                "login_date":  random.choice(dates),
                "others3": random.choice(datas)
            }
        } for i in range(10000 * j, 10000 * j + 10000)
    ]
    helpers.bulk(es, action)
end = time.time()
print('Total Time Spent: ', end - start)

执行

python esgen.py

写入了2000万条数据约13GB,足以模拟大多数测试需求了,耗时6330秒。

指定创建索引的分片数

默认的索引自动创建只有一个分片,指定分片的代码如下:

# 定义要创建的索引及其设置,包括主分片数为3  
create_index_body = {  
    "settings": {  
        "index": {  
            "number_of_shards": 3,  # 设置主分片数为3  
            "number_of_replicas": 1  # 设置副本数为1,可以根据需要调整  
        }  
    }  
}  
  
# 创建索引  
if not es.indices.exists(index="my_index"):  
    es.indices.create(index="my_index", body=create_index_body)  

在后续写入时指定为这个"my_index"即可,名字随意。

到此这篇关于Python批量写入ES索引数据的示例代码的文章就介绍到这了,更多相关Python写入ES索引数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用Python爬虫破解滑动验证码的案例解析

    用Python爬虫破解滑动验证码的案例解析

    今天分享个如何简单处理滑动图片的验证码的案例,主要是使用Python爬虫破解滑动验证码的相关实现代码,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • 能让Python提速超40倍的神器Cython详解

    能让Python提速超40倍的神器Cython详解

    今天带大家了解一下能让Python提速超40倍的神器,文章围绕着神器Cython展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Django前后端分离csrf token获取方式

    Django前后端分离csrf token获取方式

    这篇文章主要介绍了Django前后端分离csrf token获取方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python中Selenium库使用教程详解

    Python中Selenium库使用教程详解

    这篇文章主要介绍了Python中Selenium库使用教程详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 用Python实现BP神经网络(附代码)

    用Python实现BP神经网络(附代码)

    这篇文章主要介绍了用Python实现BP神经网络(附代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 对python中的装包与解包实例详解

    对python中的装包与解包实例详解

    今天小编就为大家分享一篇对python中的装包与解包实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python中的pyecharts库使用总结

    Python中的pyecharts库使用总结

    这篇文章主要介绍了Python中的pyecharts库使用总结,Pyecharts 提供了一个简单而直观的 API 接口,使得使用者无需了解复杂的 JavaScript 语法,即可通过 Python 代码实现高度定制化的图表设计,需要的朋友可以参考下
    2023-12-12
  • Python从入门到精通之Hash函数的使用详解

    Python从入门到精通之Hash函数的使用详解

    Python提供了强大而灵活的Hash函数,用于在各种应用中实现数据存储、数据校验、加密等功能,下面将从入门到精通介绍Python中Hash函数的使用,感兴趣的可以了解一下
    2023-08-08
  • Python分割列表list方法使用(平均n等份拆成)

    Python分割列表list方法使用(平均n等份拆成)

    本文主要介绍了Python分割列表list方法使用(平均n等份拆成),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 快速解决docker-py api版本不兼容的问题

    快速解决docker-py api版本不兼容的问题

    今天小编就为大家分享一篇快速解决docker-py api版本不兼容的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论