首页 文章 精选 留言 我的

精选列表

搜索[动态代码分析],共10050篇文章
优秀的个人博客,低调大师

python 动态迁移solr数据

上项目的时候,遇见一次需求,需要把在线的 其中一个 collection 里面的数据迁移到另外一个collection下,于是就百度了看到好多文章,其中大部分都是使用导入的方法,没有找到在线数据的迁移方法。于是写了python脚本,分享出来。 思路: collection数据量比较大,所以一次性操作所有数据太大,于是分段执行操作。 先分段 按1000条数据量进行查询,处理成json数据 把处理后的json数据 发送到目的collection上即可 实现:一、使用http的接口先进行查询 使用如下格式查询:其中:collection_name 是你查询的collection的名称rows 是需要查询多少行,这里设置为1000start 从多少行开始进行查询,待会儿脚本里面就是控制这个参数进行循环查询http://host:port/solr/collection_name/select?q=*:*&rows=1000&start=0 查询处理后会得到如下图片里面的数据格式,其中在response里面,有两个键值数据是我们需要的,一个是numFound(总的数据条数),docs(所有json数据都在这里面) 在docs里面,每条数据都带有version 键值,这个需要给去掉 二、使用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,src_url): #定义起始行 start = 0 #先获取到总的数据条数 se_data=r.get("%s/select?q=*:*&rows=0&start=%s"%(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"%(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地址 src_url = "http://ip:port/solr/src_connection" #导入数据导目的collection 的地址 des_url = "http://ip:port/solr/des_connection" start_time = time.time() get_data(des_url,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里面 选择 documents document type 选择xml 将一下内容复制到如图位置,最后点击submit document 按钮即可#控制web界面删除数据<delete><query>:</query></delete><commit/>

优秀的个人博客,低调大师

android 动态渐变 字符效果

public class GradientView extends View { private String TAG = " GradientView " ; private Handler mTimeTickHandler; private int mIndex = 190 ; private Shader mShader; private Bitmap mBitmapBg; private Bitmap mBitmapWord; private int mMinWidth = 190 ; private int mMaxWidth ; private int mUpdateStep = 20 ; private Paint mPaint = new Paint(); public GradientView(Context context) { super (context); } public GradientView(Context context, AttributeSet attrs) { super (context, attrs); mTimeTickHandler = new Handler(); setFocusable( true ); InputStream is = context.getResources().openRawResource(R.drawable.sliding_channel_background); mBitmapBg = BitmapFactory.decodeStream(is); mMaxWidth = mBitmapBg.getWidth(); mBitmapWord = Bitmap.createBitmap(mBitmapBg.getWidth(), mBitmapBg.getHeight(), Bitmap.Config.ALPHA_8); drawIntoBitmap(mBitmapWord, context); mTimeTickHandler.post(mTimeTickRunnable); } private void drawIntoBitmap(Bitmap bm, Context context) { float x = bm.getWidth(); float y = bm.getHeight(); Canvas c = new Canvas(bm); Paint p = new Paint(); p.setAntiAlias( true ); p.setColor(Color.WHITE); p.setTextSize( 45 ); p.setTextAlign(Paint.Align.CENTER); c.drawText(context.getResources().getString(R.string.slide_unlock), x / 2 + 10 , y / 2 , p); } @Override protected void onDraw(Canvas canvas) { // canvas.drawBitmap(mBitmapBg, 0, 0, p); mPaint.setShader(mShader); canvas.drawBitmap(mBitmapWord, 50 , 13 , mPaint); } public void removeHandlerGradient(){ mTimeTickHandler.removeCallbacks(mTimeTickRunnable); } private Runnable mTimeTickRunnable = new Runnable(){ public void run() { mIndex += mUpdateStep; if (mIndex >= mMaxWidth){ mIndex = mMinWidth; } mShader = new LinearGradient( 0 , 150 , mIndex, 150 , new int [] { Color.GRAY,Color.GRAY,Color.GRAY, Color.GRAY, Color.WHITE }, null , Shader.TileMode.MIRROR); postInvalidate(); mTimeTickHandler.postDelayed(mTimeTickRunnable, 100 ); } }; } 本文转自wanqi博客园博客,原文链接: http://www.cnblogs.com/wanqieddy/archive/2011/07/11/2103301.html 如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册