您的位置:首页 > 其它

全文索引----solr客户端工具solrJ

2016-04-27 20:09 344 查看
      上一篇博客中,我们使用solr的桌面客户端工具展示返回的数据,如果我们需要在程序中使用这些返回值的话,就需要另外的一个工具了----solrJ。

一 solrJ介绍

    1 是什么?

    为了方便的操作solr服务器,Apache为我们提供了solrJ工具,我们可以通过solrJ对solr服务器进行创建索引、更新、查询、处理返回值等操作,它其实相当于solr服务器和我们程序进行数据通信的桥梁。

    2 环境配置

    要使用solrJ工具,我们必须导入相应的jar包,这里推荐使用maven工具,因为低版本jar包没有HttpSolrServer对象,并且不支持对solr服务器中数据的删除,所以建议使用高版本jar包,本人使用4.0.0版本jar包,在pom文件中配置如下:
<dependency>
<artifactId>solr-solrj</artifactId>
<groupId>org.apache.solr</groupId>
<version>4.0.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>


下边我们开始solrJ旅程。

二 重要对象介绍

    1 HttpSolrServer

    此对象用于连接solr服务器,所有的对solr服务器的增删改查都由此对象完成,我们可以称他为solr客户端的核心对象。

    2 SolrQuery

    此对象用于封装查询条件,我们可以将我们的查询条件包括分组、排序等全部封装到这个对象中,然后由HttpSolrServer对象来执行查询对象。

    3 QueryResponse

    从名字可以看出来,这个对象是对response对象的封装,这个对象是用来封装返回值的,我们可以通过这个对象得到solr服务器的返回数据。

    4 SolrDocumentList

    这是一个集合对象,是solr服务器返回值的对象,类似jdbc中的ResultSet,我们得到我们想要的结果,通过一次简单迭代就可以。

三 实现

    1 连接服务器

    我们继续使用我们上篇播客中的solr服务器,使用HttpSolrServer连接服务器,代码如下:
String url = "http://192.168.22.216:8983/solr";
HttpSolrServer server  = new HttpSolrServer(url);

server.setSoTimeout(3000); // socket read timeout
server.setConnectionTimeout(1000);
server.setDefaultMaxConnectionsPerHost(1000);
server.setMaxTotalConnections(10);
server.setFollowRedirects(false); // defaults to false
server.setAllowCompression(true);
server.setMaxRetries(1);


    2 清空现有索引
try {
server.deleteByQuery("*:*");
} catch (SolrServerException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}


    3 构造索引
//构造document1
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField( "id", "id1", 1.0f );
doc1.addField( "name", "doc1", 1.0f );
doc1.addField( "price", 10 );

//构造document2
SolrInputDocument doc2 = new SolrInputDocument();
doc2.addField( "id", "id2", 1.0f );
doc2.addField( "name", "doc2", 1.0f );
doc2.addField( "price", 20 );

//构造document集合
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
docs.add(doc1);
docs.add(doc2);

//将documents提交给solr
try {
server.add(docs);
} catch (SolrServerException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}

//提交一个commit(方法一)
try {
server.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


    4 设置查询条件
//设置查询条件
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.addField("name");
query.setStart(0);
query.setRows(4);
query.addSortField("id", SolrQuery.ORDER.desc);
//query.addSortField("auction_point", SolrQuery.ORDER.asc);

    5 处理查询结果

//处理查询结果
QueryResponse qrsp = null;
try {
qrsp = server.query(query);
} catch (SolrServerException e) {
e.printStackTrace();
}
SolrDocumentList docsT = qrsp.getResults();
Iterator i = docs.iterator();
while(i.hasNext()){
System.out.println(i.next());
}


    6 结果



声明:如无特殊声明,本系列博客以solr-4.7.2版本为例,如有错误,敬请斧正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  solr solrJ