/*
* lucene 高亮
*/
@Test
public void highLighter(){
try {
String queryString = "钢铁侠";
Analyzer analyzer = new IKAnalyzer();
QueryParser parser = new QueryParser(Version.LUCENE_36, "bookName", analyzer);
parser.setDefaultOperator(Operator.AND);
Query query = parser.parse(queryString);
//设置高亮的样式
SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter("<font color='ref' size='8px'>", "</font>");
//实例化高亮对象,设置高亮的参数
Highlighter highter = new Highlighter(htmlFormatter, new QueryScorer(query));
highter.setTextFragmenter(new SimpleFragmenter(100));
TopDocs topDocs = indexSearcher.search(query, 100);
System.out.println("找到记录数:"+topDocs.totalHits);
for(ScoreDoc scoreDoc :topDocs.scoreDocs){
int docId = scoreDoc.doc;
Document document = indexSearcher.doc(docId);
String result = document.get("bookName");
TokenStream tokenStream = analyzer.tokenStream("bookName", new StringReader(result));
result = highter.getBestFragment(tokenStream, result);
System.out.println(result);
}
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidTokenOffsetsException e) {
e.printStackTrace();
}
* lucene 高亮
*/
@Test
public void highLighter(){
try {
String queryString = "钢铁侠";
Analyzer analyzer = new IKAnalyzer();
QueryParser parser = new QueryParser(Version.LUCENE_36, "bookName", analyzer);
parser.setDefaultOperator(Operator.AND);
Query query = parser.parse(queryString);
//设置高亮的样式
SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter("<font color='ref' size='8px'>", "</font>");
//实例化高亮对象,设置高亮的参数
Highlighter highter = new Highlighter(htmlFormatter, new QueryScorer(query));
highter.setTextFragmenter(new SimpleFragmenter(100));
TopDocs topDocs = indexSearcher.search(query, 100);
System.out.println("找到记录数:"+topDocs.totalHits);
for(ScoreDoc scoreDoc :topDocs.scoreDocs){
int docId = scoreDoc.doc;
Document document = indexSearcher.doc(docId);
String result = document.get("bookName");
TokenStream tokenStream = analyzer.tokenStream("bookName", new StringReader(result));
result = highter.getBestFragment(tokenStream, result);
System.out.println(result);
}
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidTokenOffsetsException e) {
e.printStackTrace();
}
}
结果:
<font color='ref' size='8px'>钢铁</font><font color='ref' size='8px'>侠</font>2(CD)
<font color='ref' size='8px'>钢铁</font><font color='ref' size='8px'>侠</font>(DVD)
<font color='ref' size='8px'>钢铁</font><font color='ref' size='8px'>侠</font>(DVD-9)
<font color='ref' size='8px'>钢铁</font><font color='ref' size='8px'>侠</font>
<font color='ref' size='8px'>钢铁</font><font color='ref' size='8px'>侠</font>
<font color='ref' size='8px'>钢铁</font><font color='ref' size='8px'>侠</font>