修改highlighter
改写highlighter,得到含有关键词的片段,使关键字居中,同时记录关键词、左词语、右词语的位置信息 怎么修改 请大家指导
[解决办法]
那得需要改源码了吧!
[解决办法]
我没有lucene源代码,不建议修改啊!
[解决办法]
lucene自己有高亮显示的样例的,我发给你个实例吧:
// 高亮处理。
SimpleHTMLFormatter sHtml=new SimpleHTMLFormatter("<font color='red'><b>","</b></font>");
Highlighter highlighter=new Highlighter(sHtml,new QueryScorer(query));
highlighter.setTextFragmenter(new SimpleFragmenter(100));
if(title!=null){
title+=" ";
TokenStream tokenStream=analyzer.tokenStream("title",new StringReader(title));
String titleText=highlighter.getBestFragment(tokenStream,title);;
if(titleText==null)titleText="";
strtext+=titleText+" ";;
}
if(content!=null){
content+=" ";
TokenStream tokenStream=analyzer.tokenStream("content",new StringReader(content));
String contentText=highlighter.getBestFragment(tokenStream,content);
if(contentText==null)contentText="";
strtext+=contentText+" ";;
}
if(filedId!=null){
filedId+=" ";
TokenStream tokenStream=analyzer.tokenStream("uk_file_id",new StringReader(filedId));
String filedIdText=highlighter.getBestFragment(tokenStream,filedId);;
if(filedIdText==null)filedIdText="";
strtext+=filedIdText+" ";
}
if(type!=null){
type+=" ";
TokenStream tokenStream=analyzer.tokenStream("type",new StringReader(type));
String typetext=highlighter.getBestFragment(tokenStream,type);
if(typetext==null)typetext="";
strtext+=typetext+" ";;
}
//如果获取高亮显示为空,则取原始数据。bug的一个补充。
if(strtext.trim().equalsIgnoreCase("")){
strtext="标题:"+title+" 内容"+content+" 编号:"+filedId+ "分类:"+type;
}
rs.setResult(strtext);
// System.out.println();
// System.out.println(" id:"+id+" strtext:"+strtext);
// System.out.println();
list.add(rs);
}
[解决办法]
个人认为没必要把高亮弄得这么复杂,比如 直接 关键词n 对应 蓝色,n+1 对应 黑色 。。。。 直接替换就OK了
[解决办法]
lucene的高亮的却不是很适合生产,我也在尝试更改高亮源码。