Lucene高亮关键字与设置高亮串长度
Please read full article from Lucene高亮关键字与设置高亮串长度
Lucene的Hightlight模块可以高亮搜索结果中的关键字,给搜索引擎自定义界面的自由。
如何创建Highlighter
为了创建一个Highlighter,需要一个Formatter和一个Scorer,如下所示:
1
| Highlighter highlighter = new Highlighter(new SimpleHTMLFormatter("<font color='red'>", "</font>"), new QueryScorer(query)); |
如何高亮
有多种接口,只举最简单的一个,需要Analyzer,fieldName和fieldContent:
1
| highlighter.getBestFragment(analyzer, fieldName, fieldContent) |
如何控制结果的长度
通过设置Fragmenter的长度即可实现:
1
2
| Fragmenter fragmenter = new SimpleFragmenter(fragmentSize);highlighter.setTextFragmenter(fragmenter); |
String keyword = "喜欢"; //使用QueryParser查询分析器构造Query对象 QueryParser qp = new QueryParser(ver, fieldName, analyzer); Query query = qp.parse(keyword); System.out.println("Query = " + query); //搜索相似度最高的5条记录 TopDocs topDocs = isearcher.search(query, 5); System.out.println("命中:" + topDocs.totalHits); //输出结果 ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (int i = 0; i < Math.min(5, scoreDocs.length); ++i) { Document targetDoc = isearcher.doc(scoreDocs[i].doc); System.out.print(targetDoc.getField("title").stringValue()); System.out.println(" , " + scoreDocs[i].score); String text = targetDoc.get(fieldName); System.out.println(displayHtmlHighlight(query, analyzer, fieldName, text, 200)); } static String displayHtmlHighlight(Query query, Analyzer analyzer, String fieldName, String fieldContent, int fragmentSize) throws IOException, InvalidTokenOffsetsException { //创建一个高亮器 Highlighter highlighter = new Highlighter(new SimpleHTMLFormatter("<font color='red'>", "</font>"), new QueryScorer(query)); Fragmenter fragmenter = new SimpleFragmenter(fragmentSize); highlighter.setTextFragmenter(fragmenter); return highlighter.getBestFragment(analyzer, fieldName, fieldContent); }
No comments:
Post a Comment