热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

solr版本升级说明

1概述Solr5发布了,带来了许多新特性,但Solrj的许多接口也发生了变化,下面是和之前的版本进行的一些对比:变化1:SolrServer变成了SolrClient应该说这个变化是合理
1  概述

Solr5发布了,带来了许多新特性,但Solrj的许多接口也发生了变化,下面是和之前的版本进行的一些对比:



变化1SolrServer变成了SolrClient

应该说这个变化是合理的,毕竟Solrj就是一个客户端,命名为Server本身就有问题。这样一来,所有SolrServer系列的类都需要更改为SolrClient系列的类,好在方法基本继承过来了,只需要修改一下类名就可以了。

SolrServer -> SolrClient

HttpSolrServer -> HttpSolrClient

CloudSolrServer -> CloudSolrClient




变化2:提交请求的方式变了

Solrj4中,向服务器提交请求的方式比较简单,首先扩展SolrRequest类,将需要组合的参数都以方法的形式暴露出来,并重写process方法进行参数组合,如下所示。

class MySolrRequest extends SolrRequest {

......

@Override
public SolrResponseprocess(SolrServer server)
throws SolrServerException, IOException {
long startTime = System.currentTimeMillis();
CoreAdminResponse res = new CoreAdminResponse();
res.setResponse( server.request( this ) );
res.setElapsedTime( System.currentTimeMillis()-startTime );
return res;
}
}

SolrRequest req = new MySolrRequest();
SolrResponse res = req.process(solrServer);
if (res.getResponse().findRecursive("error", "failure") != null)
return false;
return true;


Solrj5中,SolrRequest被极大地增强了,定义了许多新的子类出来,用户基本上不需要自定义新的Request类了,但学习成本相应的也变高了。 
以在Cloud中创建Collection为例,新的RequestCollectionAdminRequest.Create类,用户只需要创建这个类的实例就可以设置所有的相关参数。提交仍然是process方法,只不过这个方法已经不需要我们重载了,直接调用就可以了,而且还扩展了返回的SolrResponse类,例如这里返回的就是CollectionAdminResponse类,代码如下。

CollectionAdminRequest.Create req = new CollectionAdminRequest.Create();
try {
req.setCollectionName(coreName);
req.setConfigName(confName);

req.setReplicationFactor(factor);
req.setNumShards(shards);
req.setMaxShardsPerNode(maxShardsPerNode);
CollectionAdminResponse res = req.process(cloudSolrClient);
if (res.getResponse().findRecursive("error", "failure") != null)
return false;
return true;
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


新版的process方法比老版的多抛出一个IOException异常,需要增加对该异常的处理。



变化3:对Zookeeper的支持增强了

Solrj4中,对Zookeeper的支持还比较简单,主要就是通过org.apache.solr.cloud.ZkController类来完成对Zookeeper中内容的管理。 
到了Solrj5,对ZkController类的方法进行了分隔,新增加了不少类,而且干脆就抛弃了对ZkController类的支持,因此给代码升级带来不少麻烦。 
例如对于对在Zookeeper中配置文件的管理,老版代码为

ZkController.uploadConfigDir(zkClient, new File(confDir), confName);
ZkController.downloadConfigDir(zkClient, confName, new File(confDir));


新版增加了ZkConfigManager类进行专门管理,相应的方法也由静态方法变成了动态方法,尤其是参数从File类型变成了JDK7中新引入的Path类型。

ZkCOnfigManagerconfManager= new ZkConfigManager(zkClient);
confManager.uploadConfigDir(Paths.get(confDir), confName);
confManager.downloadConfigDir(confName, Paths.get(confDir));


 

 

变化4:solr安装目录差异

solr5和之前的3版本相差比较大,如:在solr5中已经没有schema.xml,而是改成managed-schema文件。

当然还有其他目录结构的变化,这里就不详细列出了。

 

 


推荐阅读
author-avatar
为什么不嫩注册
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有