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

      上一篇博客中,我们使用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版本为例,如有错误,敬请斧正。
 

猜你喜欢

转载自blog.csdn.net/u010942465/article/details/51263994
今日推荐