Solr示例

Lucene是apache软件基金会提供的一款开源全文检索引擎。Solr是在lucene基础上封装得更易于使用的全文检索服务器并提供了相关api。

本文使用solr3.4,做一个使用示例,已调试通过。更高版本可能需要更改代码。

1.启动solr。解开solr压缩包后,在solr_home\dist下有个war包。一种方式是把这个war包部署到web容器里。我这里图省事,就直接用自带的jetty。启动方式是在example目录下,运行java –jar start.jar。后台会显示默认占用8983端口。此时,访问http://localhost:8983/solr 应该是有响应了。

2.向solr里输入数据。一种方式就是使用api(见后面代码),还有一种方式是用命令行对一些磁盘文件进行索引。如在exampledoc目录下执行:java–jar post.jar *.xml。

下面代码是展示数据录入、查询等功能了。工程需要引入以下一些jar包:

apache-solr-solrj-3.4.0.jar、commons-httpclient-3.1.jar、commons-codec-1.4.jar、slf4j-api-1.6.1.jar、commons-logging-1.1.3.jar

import java.util.*;

import org.apache.solr.client.solrj.*;
import org.apache.solr.client.solrj.impl.*;
import org.apache.solr.client.solrj.response.*;
import org.apache.solr.common.*;

public class SolrTest {
	public static void main(String[] args)throws Exception{
		String url = "http://localhost:8983/solr";
		SolrServer server = new CommonsHttpSolrServer(url);
		
		server.deleteByQuery( "*:*" );
		
		SolrInputDocument doc1 = new SolrInputDocument();
		doc1.addField( "id", "book1" );
		doc1.addField( "name", "倚天屠龙记");
		doc1.addField( "price", 29 );
		
		SolrInputDocument doc2 = new SolrInputDocument();
		doc2.addField( "id", "book2" );
		doc2.addField( "name", "神雕侠侣" );
		doc2.addField( "price", 20 );
		
		SolrInputDocument doc3 = new SolrInputDocument();
		doc3.addField( "id", "book3");
		doc3.addField( "name", "天龙八部");
		doc3.addField( "price", 33.8 );
		
		SolrInputDocument doc4 = new SolrInputDocument();
		doc4.addField( "id", "book4" );
		doc4.addField( "name", "射雕英雄传");
		doc4.addField( "price", 25.5 );
		
		List<SolrInputDocument> docs = new  ArrayList<SolrInputDocument>();
		docs.add(doc1);
		docs.add(doc2);
		docs.add(doc3);
		docs.add(doc4);
		server.add(docs);

		server.commit();

		SolrQuery query = new SolrQuery();
		query.setQuery( "name:天" );
		query.setStart(0);
		query.setRows(5);
		query.addSortField( "price", SolrQuery.ORDER.desc );
		
		query.setHighlight(true);
		query.addHighlightField("name"); 
		query.setHighlightSimplePre("<font color=\"red\">");
		query.setHighlightSimplePost("</font>");  
		query.set("hl.usePhraseHighlighter",true);
		query.set("hl.highlightMultiTerm",true);
		query.set("hl.snippets",3);
		query.set("hl.fragsize", 5);
				
		QueryResponse rsp = server.query( query );
		System.out.println(rsp);
		
		SolrDocumentList docsList = rsp.getResults();
		
		//获取高亮结果
		Map<String,Map<String,List<String>>> hl = rsp.getHighlighting();  
		
		for(Iterator<SolrDocument> doc =docsList.iterator();doc.hasNext();){
			SolrDocument d = doc.next();
			System.out.print(d.getFieldValue("id")+":");
			System.out.println(d.getFieldValue("name"));
		}
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值