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