版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36059561/article/details/83930168
一、高亮显示用到的类
- Fragmenter:拿到一个字符串之后,对字符串进行分段
- QueryScorer:查询评分,将评分最高的展示给用户
- Encoder:显示出来的文本有两种,一种是SimpleEncode(忽略掉HTML标签),一种是DefaultEncode(展示HTML标签)
- Formatter:自定义标注高亮文本标签
二、代码实例
这里简单展示下高亮类的使用,对一个句子做了高亮显示处理。可以发现输出的内容中,关键词被加上了span标签。
package com.wsy;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.highlight.*;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;
import java.io.IOException;
public class HighLightTest {
private static String text = "我爱北京天安门, 天安门上太阳升, 伟大领袖毛主席, 指引我们向前进!";
public void highLight1(String text) {
Analyzer analyzer = new IKAnalyzer();
try {
// 只能对一个词添加高亮
// TermQuery query = new TermQuery(new Term("content", "天安门"));
// 可以对多个词添加高亮,多个关键词用空格分隔开
Query query = new QueryParser(Version.LUCENE_35, "content", analyzer).parse("北京 伟大");
QueryScorer queryScorer = new QueryScorer(query);
Fragmenter fragmenter = new SimpleSpanFragmenter(queryScorer);
Formatter formatter = new SimpleHTMLFormatter("<span style='color:red'>", "</span>");
Highlighter highlighter = new Highlighter(formatter, queryScorer);
highlighter.setTextFragmenter(fragmenter);
String highLightString = highlighter.getBestFragment(analyzer, "content", text);
System.out.println(highLightString);
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidTokenOffsetsException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
HighLightTest highLightTest = new HighLightTest();
highLightTest.highLight1(text);
}
}