`
HelloTommy
  • 浏览: 96941 次
  • 性别: Icon_minigender_1
  • 来自: 慈溪
社区版块
存档分类
最新评论

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官方推荐的,每次都对索引进行检索,虽然效率并不高,但操作相对简单很多。就跟普通分页

一样。

  • 大小: 44.8 KB
  • 大小: 51.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics