修改highlighter解决思路
修改highlighter
改写highlighter,得到含有关键词的片段,使关键字居中,同时记录关键词、左词语、右词语的位置信息 怎么修改 请大家指导
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
lucene自己有高亮显示的样例的,我发给你个实例吧:
改写highlighter,得到含有关键词的片段,使关键字居中,同时记录关键词、左词语、右词语的位置信息 怎么修改 请大家指导
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
lucene自己有高亮显示的样例的,我发给你个实例吧:
- Java code
// 高亮处理。 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的高亮的却不是很适合生产,我也在尝试更改高亮源码。