我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python 动态迁移solr数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python 动态迁移solr数据

上项目的时候,遇见一次需求,需要把在线的 其中一个 collection 里面的数据迁移到另外一个collection下,于是就百度了看到好多文章,其中大部分都是使用导入的方法,没有找到在线数据的迁移方法。于是写了python脚本,分享出来。

思路: collection数据量比较大,所以一次性操作所有数据太大,于是分段执行操作。

  1. 先分段 按1000条数据量进行查询,处理成json数据
  2. 把处理后的json数据 发送到目的collection上即可

实现:
一、使用http的接口先进行查询

  1. 使用如下格式查询:
    其中:collection_name 是你查询的collection的名称
    rows 是需要查询多少行,这里设置为1000
    start 从多少行开始进行查询,待会儿脚本里面就是控制这个参数进行循环查询
    http://host:port/solr/collection_name/select?q=*:*&rows=1000&start=0

查询处理后会得到如下图片里面的数据格式,其中
在response里面,有两个键值数据是我们需要的,一个是numFound(总的数据条数),docs(所有json数据都在这里面)

python 动态迁移solr数据

  1. 在docs里面,每条数据都带有version 键值,这个需要给去掉
    python 动态迁移solr数据

二、使用http的接口提交数据
wt:使用json格式提交
http://host:port/solr/collection_name/update?wt=json

header 需设置为 {"Content-Type": "application/json"}

提交参数:solr在做索引的时候,如果文档已经存在,就替换。(这里的参数也可以直接加到url里面)
{"overwrite":"true","commit":"true"}

data_dict 就是我们处理后的 docs数据
提交数据:data={"add":{ "doc":data_dict}}

三、实现的脚本如下:

#coding=utf-8
import requests as r
import json
import threading
import time

#发送数据到目的url des_url,data_dict 参数为去掉version键值后的一条字典数据
def send_data(des_url,data_dict):
    data={"add":{ "doc":data_dict}}
    headers = {"Content-Type": "application/json"}
    params = {"boost":1.0,"overwrite":"true","&commitWithin":1000,"commit":"true"}
    url = "%s/update?wt=json"%(des_url)
    re = r.post(url,json = data,params=params,headers=headers)
    if re.status_code != 200:
        print("导入出错",data)

#获取数据,调用send_data 发送数据到目的url
def get_data(des_url,class="lazy" data-src_url):
        #定义起始行
    start = 0
    #先获取到总的数据条数
    se_data=r.get("%s/select?q=*:*&rows=0&start=%s"%(class="lazy" data-src_url,start)).text
    se_dict = json.loads(se_data)
    numFound = int(se_dict["response"]["numFound"])
    #while循环,1000条数据为一个循环
    while start < numFound:
        #定义存放多线程的列表
        th_li = []
                #获取1000条数据
        se_data=r.get("%s/select?q=*:*&rows=1000&start=%s"%(class="lazy" data-src_url,start)).text
                #把获取的数据转换成字典
        se_dict = json.loads(se_data)
                #获取数据里的docs数据
        s_data = (se_dict["response"]["docs"])

        #循环得到的数据,删除 version键值,并使用多线程调用send_data 方法发送数据
        for i in s_data:
            del i["_version_"]
            th = threading.Thread(target=send_data,args=(des_url,i))
            th_li.append(th)

        for t in th_li:
            t.start()
            t.join()

        start += 1000
        print(start)

if __name__ == "__main__":
    #源数据,查询数据的collection地址
    class="lazy" data-src_url = "http://ip:port/solr/class="lazy" data-src_connection"
    #导入数据导目的collection 的地址
    des_url = "http://ip:port/solr/des_connection"
    start_time = time.time()
    get_data(des_url,class="lazy" data-src_url)
    end_time = time.time()
    print("耗时:",end_time-start_time,"秒")

备注:
一、如果你的collection 不在同一个网络,不能实现在线传输,可以先把for循环 删除了version键值的数据,写入一个文件中,然后copy到目的网络的服务器上,循环读取文件进行上传,如下写入文件(这个就根据各位大佬的喜好来写了),但读取后,需要把每一条数据都转换成字典进行上传:
file = open("solr.json","a+")
for i in s_data:
del i["version"]
file.write(str(i)+"\n")
file.close()

二、清除数据可使用一下方法,自测比较方便的一种
在你要清除collection里面

  1. 选择 documents
  2. document type 选择xml
  3. 将一下内容复制到如图位置,最后点击submit document 按钮即可
    #控制web界面删除数据
    <delete><query>:</query></delete>
    <commit/>
    python 动态迁移solr数据

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python 动态迁移solr数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python 动态迁移solr数据

上项目的时候,遇见一次需求,需要把在线的 其中一个 collection 里面的数据迁移到另外一个collection下,于是就百度了看到好多文章,其中大部分都是使用导入的方法,没有找到在线数据的迁移方法。于是写了python脚本,分享出来
2023-01-31

EntityFramework数据迁移

1.启用迁移 在Package Manager Console中运行Enable-Migrations命令 此命令已将Migrations文件夹添加到我们的项目中,此新文件夹包含两个文件: Configuration.cs
EntityFramework数据迁移
2021-02-20

数据源管理 | 动态权限校验,表结构和数据迁移流程

本文源码:GitHub·点这里 || GitEE·点这里一、数据同步简介1、场景描述如果经常接触数据开发,会有这样一个场景,服务A提供一个数据源,假设称为动态数据源A,需要读取该数据源下的数据;服务B提供一个数据源,假设称为动态数据源B,
2023-06-02

sqlserver 数据库迁移

数据迁移  业务情景    客户环境是系统A的1.0版本,开发环境是系统A的2.0版本。2.0版本对于数据库有部分变更(主要是新增表和字段,不涉及字段删除和变更)。这个时候需要在客户环境安装数据库2.0(表结构、存储过程都是用的2.0),但是数据
sqlserver 数据库迁移
2019-04-26

mysql数据库迁移

目录 背景迁移数据库 背景 公司有个项目,刚开始数据量不是大的时候,数据库和服务上的所有应用数据都放在一个旧小盘中,随着项目数据的增长,旧的磁盘被占满了,导致系统无法写入数据,我和同事排查了很长时间,最终确定是磁盘被占满导致的一
2023-08-23

MySQL数据迁移步骤

MySQL数据迁移的步骤主要包括以下几个阶段:环境准备:确保源服务器和目标服务器的MySQL版本一致或兼容。在目标服务器上创建一个新的数据库,用于存放迁移后的数据。导出源数据:使用mysqldump命令导出源数据库的数据。这是将数据从源服
MySQL数据迁移步骤
2024-10-20

golang数据库自动迁移怎么实现

在Go语言中,实现数据库自动迁移可以使用一些第三方库,如gorm、migrate等。下面以使用gorm库实现数据库自动迁移为例进行说明。1. 安装gorm库:使用go get命令安装gorm库。bashgo get -u gorm.io/g
2023-10-20

CMS数据迁移不再难:掌握技巧,轻松迁移数据

CMS数据迁移是网站建设中常见的任务,但它也可能是非常复杂和耗时的。本文将介绍一些技巧,帮助您轻松迁移CMS数据,减少停机时间和数据丢失。
CMS数据迁移不再难:掌握技巧,轻松迁移数据
2024-02-25

Easticsearch 数据迁移至in

Easticsearch 数据迁移至influxdb python需求:将Easticsearch部分数据迁移至influxdb中。见过从mysql,influxdb迁移至Easticsearch中的,没见过从Easticsearch迁移至
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录