转载请声明出处: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()