lucene 学习实战系列(高亮+分页)

       对查询内容分页,那是必须的。当然最好是能够对所查询的关键字进行高亮显示。

       对于高亮有直接的api,但是对于分页。虽然没有直接的方法,但也有类似于hibernate分页的方法,但我们可以用

IndexSearcher提供的doc方法,直接通过数组下标来获取该组对象集合。

       此例在myeclipse8.5++tomcat6+jdk1.6+lucene3.0.2+struts2.2.1+freemarker-2.3.16下测试通过

      

 

         效果图:

       

 

        

            做的很简单,只是为了展现高亮+分页的效果

            这个分页效果是我第一篇博客的仿QQ的效果。嘿嘿。推销一下。

            http://hellotommy.iteye.com/blog/785242

          一:高亮部分代码

           

SimpleHTMLFormatter simpleHtmlFormatter = new SimpleHTMLFormatter("<b><font color='red'>","</font></b>");	//高亮样式,粗体+red
Highlighter highlighter = new Highlighter(simpleHtmlFormatter,new QueryScorer(query));	//对查询出来的query进行高亮设置
highlighter.setTextFragmenter(new SimpleFragmenter(100));	//关键字两旁字数
TokenStream tokenStream1 = analyzer.tokenStream("newsTitle",new StringReader(resultDoc.get("newsTitle")));	//TokenStream用来分析文字流
TokenStream tokenStream2 = analyzer.tokenStream("newsContent",new StringReader(resultDoc.get("newsContent")));
String bestFragment1 = highlighter.getBestFragment(tokenStream1, resultDoc.get("newsTitle"));		//匹配样式
String bestFragment2 = highlighter.getBestFragment(tokenStream2, resultDoc.get("newsContent"));

 

           二:分页部分

          

List<News> newsList=new ArrayList<News>();
for (int i = firstResult; i < firstResult+maxResult ; i++){   //按照分页的序号遍历。
	News news=new News();
            	Document resultDoc = isearcher.doc(docs[i].doc);
	news.setNewsId(resultDoc.get("newsId"));
	.....newsList.add(news);		//讲对象加入集合中
}   

           大致就是以上这样子。

           分页采用lucene官方推荐的,每次都对索引进行检索,虽然效率并不高,但操作相对简单很多。就跟普通分页

一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值