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

来源:互联网 发布:2017网络虚假新闻案例 编辑:程序博客网 时间:2024/05/22 09:01
      上一篇博客中,我们使用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 timeoutserver.setConnectionTimeout(1000);server.setDefaultMaxConnectionsPerHost(1000);server.setMaxTotalConnections(10);server.setFollowRedirects(false); // defaults to falseserver.setAllowCompression(true);server.setMaxRetries(1);

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

    3 构造索引
//构造document1SolrInputDocument doc1 = new SolrInputDocument();doc1.addField( "id", "id1", 1.0f );doc1.addField( "name", "doc1", 1.0f );doc1.addField( "price", 10 );//构造document2SolrInputDocument 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提交给solrtry {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版本为例,如有错误,敬请斧正。

2 0