转自: http://www.cnblogs.com/huangfox/archive/2012/02/13/2348949.html
solrJ可以看成是solr的java版客户端,提供基本的索引维护、检索等功能。
solrJ和solr服务端有两种“沟通”方式:
第一,利用http进行通信。
第二,直接访问solrCore(solr配置文件、索引文件等),不需要http通信(without http)。
solrJ的SolrServer类结构如下图所示:
EmbeddedSolrServer是第二种方式,CommonsHttpSolrServer,LBHttpSolrServer是第一种方式,
其中LBHttpSolrServer是在CommonsHttpSolrServer的基础上提供了负载均衡的功能(load Balanced)。
在很多应用场景下,我们基本都会选择CommonsHttpSolrServer(LBHttpSolrServer)的方式。最近笔者有这样一个 需求,在异构平台上,有多种语言开发的系统都需要对基础数据进行检索,如果每个系统都针对性的开发一个客户端,主要缺陷是紧耦合。因此笔者考虑在solr 的基础上开发一套标准的webService接口发布服务,如果在solrCore的基础上进行调整,调整量太大,如果借助solrJ的 CommonsHttpSolrServer与solrServer进行沟通,那么就会多走一次http。最后发现EmbeddedSolrServer 可以解决这个问题。
然后目前EmbeddedSolrServer也有一些问题需要处理,例如:multiCore、load Balanced等。
下面我们从检索入手,初步了解solrJ的使用方法。
第一步:建立solrJ客户端的“通讯员”(CommonsHttpSolrServer)
SolrServer server = new CommonsHttpSolrServer( url );
|
第二步:检索
方式一:借助SolrRequestParsers解析“检索字符串”进行检索
public void query01(String queryString) {
SolrParams solrParams = SolrRequestParsers
.parseQueryString(queryString);
try {
QueryResponse rsp = solr.query(solrParams);
List<PatentBean> results = rsp.getBeans(PatentBean. class );
for (PatentBean bean : results)
System.out.println(bean.toString());
} catch (SolrServerException e) {
e.printStackTrace();
}
}
|
queryString:String queryString = "q=ti:汽车&version=2.2&start=0&rows=10&indent=on";
这种方式简单,但是在应用中通过拼接字符串是比较憋足的,所以这种方式应用较少。
注意:
List<PatentBean> results = rsp.getBeans(PatentBean.class);Bean这种方式,不管索引维护,还是检索都十分方便。
方式二:借助ModifiableSolrParams对象接收查询条件进行检索
public void query02(String queryString) {
ModifiableSolrParams solrParams = new ModifiableSolrParams();
solrParams.add( "q" , queryString);
solrParams.add( "start" , "0" );
solrParams.add( "rows" , "10" );
try {
QueryResponse rsp = solr.query(solrParams);
List<PatentBean> results = rsp.getBeans(PatentBean. class );
for (PatentBean bean : results)
System.out.println(bean.toString());
} catch (SolrServerException e) {
e.printStackTrace();
}
}
|
这种方式和第一种类似,如果第一种方式用个StringBuilt接收参数,那么就没什么两样了!
方式三:借助solrQuery对象接收查询条件进行检索
public void query02(String queryString) {
SolrQuery query = new SolrQuery();
query.setQuery(queryString);
query.setStart( 0 );
query.setRows( 10 );
QueryResponse rsp;
try {
rsp = solr.query(query);
List<PatentBean> results = rsp.getBeans(PatentBean. class );
for (PatentBean bean : results)
System.out.println(bean.toString());
} catch (SolrServerException e) {
e.printStackTrace();
}
}
|
添加高亮效果:
query.setHighlight( true ).setHighlightSnippets( 1 );
query.setParam( "hl.fl" , "ti" );
|
使用EmbeddedSolrServer进行检索
创建EmbeddedSolrServer对象,如下:
private static CoreContainer.Initializer initializer = null ;
private static CoreContainer coreContainer = null ;
private static EmbeddedSolrServer server = null ;
static {
try {
System.setProperty( "solr.solr.home" , "D:/solrHome/example/solr02" );
initializer = new CoreContainer.Initializer();
coreContainer = initializer.initialize();
server = new EmbeddedSolrServer(coreContainer, "" );
} catch (Exception e) {
e.printStackTrace();
}
}
|
参考:
相关推荐
apache-solr-solrj-3.5.0.jar
solr-solrj-4.9.0.jar
压缩文件里面有solr-solrj-4.10.3.jar和solr-solrj-5.0.0.jar两个jar
solr-solrj-4.4.0.jar
solr-solrj-6.6.0.jar
jar包,亲测可用
solr的核心jar,大家可以一起好好学习一下,还是很优秀的
jar包,亲测可用
ik-analyzer分词器,支持solr5-5.x
solrJ是Java连接solr进行查询检索和索引更新维护的jar包。
下载后会获得名为:solr_core.4.6.0 的zip包,解压后会获得solr-core-4.6.0.jar和 solr-solrj-4.6.0.jar两个文件,搭建solr全文检索环境必须要添加的包
solr-solrj-4.10.3.jar。
solr-mongo-importer-1.1.0.jar solr-mongo-importer-1.1.0.jar solr-mongo-importer-1.1.0.jar
solr-solrj 5.0.0 和自己搭建的solr服务交互
中文分词器ik-analyzer-solr5-5.x.jar,已经打包好,直接用就可以
solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-...
solr6 solr-dataimporthandler-scheduler-1.1源码,可以自己编译适应不同版本solr