sunburnt 学习笔记 (三) 连接python和solr

转载请声明出处:http://blog.csdn.net/wbcg111/article/details/47425967

连接python和solr

不管你是想查询还是想更新solr服务器,你都需要连接上solr服务器。sunburnt是通过url来与solr建立一个SolrInterface对象的。
代码如下:

solr_interface = sunburnt.SolrInterface("http://localhost:8983/solr/")

如果你使用的是多core,那么你需要提供一个完整的url来建立一个连接对象,比如你的core的名字是master,那么代码就是

solr_interface = sunburnt.SolrInterface("http://localhost:8983/solr/master/")

连接对象可以接受另外三个可选参数。
1. schemadoc.
默认情况下,sunburnt会以当前的模式查询 ,如果你因为某些原因想使用不同的模式,在此可以上传一份schema文件。
2. http_connection.
默认情况下,solr会打开一个新的httplib2.Http对象来访问 ,如果你想重复使用一个存在的连接,或者设置自己的Http对象等等,那么http_connection能够成为支持Http.request()方法的任何对象。(详情请看HTTP caching)
3. mode.
正常的solr配置是用不同的core用来读和写的,它们具有非常不同的性能特征,您可以通过强制设置mode=’r’或者mode=’w’.
在任何一种情况下,如果您稍后尝试在接口上执行了错误的排序操作,sunburnt会抛出一个异常,IE试图在只读的core上更新查询,或者试图在只写的core上查询。默认情况下,所有solr接口对象都会以读写模式打开。
4. retry_timeout.
默认情况下,如果sunburnt连接solr服务器失败,它就会失败,并抛出一个socke.error.如果你制定一个retry_timeout,那么当连接solr服务器失败时,它就会在retry_timeout时间后再次尝试连接。当然它只会尝试再次连接一次,如果还是连接失败,那么就会抛出socke.error。如果你的solr连接在某些情况下会短暂或者偶尔失败,但是你不想给solr进程造成失败,那么这种方法非常有用。例如,你正在控制solr服务器,并且想重新上传一些配置文件。

HTTP caching

通常非常明智的做法是不使用http_connection,因为它并不会做任何缓存。你很可能会发现你的程序作出同样的要求超过一次(因为也许你的用户进行相同的公共搜索) ,那么你应该使用一个缓存的HTTP连接。solr对搜索结果有非常良好的内部缓存,而且还支持相应的HTTP级缓存, 所以通常会采用这种方式得到更好地性能。要做到这一点,需要如下设置接口:

solr_url = "http://localhost:8983/solr"
h = httplib2.Http(cache="/var/tmp/solr_cache")
solr_interface = SolrInterface(url=solr_url, http_connection=h)

Schema migrations

某些情况下,我们需要对solr的schema做一些改变,或者是增加一些新的fields(字段),或者是对已存在的fields做一些配置变动。
有不同的方法可以做到这一点。其中一个最易懂的方式就是复制现有的core,,更新其离线模式,然后使用Solr的多核命令改变core。但是当SolrInterface被初始化的时候,它就被设置成了一个单一schema.如果core被设置成不同的schema,那么SolrInterface对象将不能反映这种变化,直到你告诉它重读模式:

si = SolrInterface(solr_server)
#重新启动solr修改后的schema(模式)
si.init_schema()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值