(转)lucene高亮显示 .
01.//首先获取docId的TokenStream 02.TokenStream tokenStream=TokenSources.getAnyTokenStream(reader, docId, field, analyzer); 03.//构建Fragmenter对象,用于文档切片 04.Fragmenter fragmenter = new SimpleFragmenter(100);//默认字符为100 05.//构建Scorer,用于选取最佳切片 06.Scorer fragmentScore = new QueryScorer(query); 07.//构建Formatter格式化最终显示(将字体颜色设置为红色) 08.Formatter formatter = new SimpleHTMLFormatter("<font color='red'>","</font>"); 09.//实例化Highlighter组件 10.Highlighter highlighter = new Highlighter(formatter,fragmentScore); 11.highlighter.setTextFragmenter(fragmenter); 12.// 最后一步,获取hightlightText 13.highlighter.getBestFragment(tokenStream, text);//第二个参数为原始文档信息
?
FastVectorHighlighter使用示例:?
- //构造Highlighter组件 ??FragListBuilder?fragListBuilder?=?new?SimpleFragListBuilder();??
- FragmentsBuilder?fragmentBuilder?=new?ScoreOrderFragmentsBuilder(??????????????????BaseFragmentsBuilder.COLORED_PRE_TAGS,??
- ????????????????BaseFragmentsBuilder.COLORED_POST_TAGS);??FastVectorHighlighter?highligher=new?FastVectorHighlighter(true,?true,fragListBuilder,?fragmentBuilder);??
- //构造FieldQuery ??Query?query=new?QueryParser(...).parse(...);??
- FieldQuery?fieldQuery?=?highlighter.getFieldQuery(query);??//高亮最佳文档切片 ??
- highlighter.getBestFragment(fieldQuery,?IndexReader?reader,?int?docId,?String?field,?int?fragCharSize);//fragCharSize需要大于18??
?
注意:使用FastVectorHighlighter,在创建索引时,必须要为field指定TermVector.WITH_POSITIONS_OFFSETS和Store.YES属性