浏览 2371 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-31
Highlighter类有一个getBestFragment方法,这个方法有多个重载的方法,其中,使用: public final String getBestFragment(Analyzer analyzer, String fieldName,String text) 就可以提取摘要,它实现了从指定的原始文件中,提取检索关键字出现频率最高的一段文字作为摘要,默认情况下 提取100个字符,同时加上自定义的高亮显示代码,又可实现关键字高亮显示。 代码 好下: 提醒下:要用Highlighter这个包 ,但是lucene-core-2.9.1.jar 这个包是不包Highlighter这个包的 在你下载的官方安装包 contrib\highlighter\lucene-highlighter-2.9.1.jar 唉,就因来这个包,又花了我不少时间找.已经遇到几次这种情况了 public static void main(String[] args) { String prefixHTML = "<font color='red'>"; String suffixHTML = "</font>"; String content = "学JAVA到刘志猛博客JAVA为学习博客"; // 定义要建索的内容 String sql = "JAVA 博客"; // 要搜索的关键字 Hits hits = null; // Hits类――检索结果 Query query = null; // RAMDirectory directory = new RAMDirectory(); IndexWriter writer; try { writer = new IndexWriter("c:\\indexM", new SmartChineseAnalyzer(), true); Document doc = new Document(); doc.add(new Field("field", content, Field.Store.YES,Field.Index.TOKENIZED,Field.TermVector.WITH_OFFSETS)); writer.addDocument(doc); writer.close(); } catch (CorruptIndexException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (LockObtainFailedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }// 这要注意思下 // new StandardAnalyzer() 是标准过虑,new WhitespaceAnalyzer() 是空格过虑 // 如果用new WhitespaceAnalyzer() 就是把content="刘志猛 中华 人民国" 按空格来检索了 // 这方面主知识可以 查 分析器Analysis相关内容 // 建索引end // 查询 IndexSearcher searcher; try { searcher = new IndexSearcher("c:\\indexM"); Analyzer anlyzer=new SmartChineseAnalyzer(); QueryParser parser = new QueryParser("field",anlyzer); try { query = parser.parse(sql); hits = searcher.search(query); for (int i = 0; i < hits.length(); i++) { if (hits.length() > 0) { Document document = hits.doc(i); System.out.println("内容:" + document.get("field")); String str = document.get("field"); // str = str.replaceAll(sql, "#" + sql + "#");// 在这我把关键字做了一个替换.这种方法可以模仿google // 关键字变红 在这我有#替换了 如果是html页面,可以用html语言替换 int htmlLength = prefixHTML.length()+suffixHTML.length(); System.out.println("高亮HTML的总长度为"+htmlLength); SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(prefixHTML, suffixHTML); Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query)); String highLightText; try { highLightText = highlighter.getBestFragment(anlyzer,"field",str); System.out.println("★高亮显示第 "+(i+1) +" 条检索结果如下所示:"); System.out.println(highLightText); System.out.println("显示第 "+(i+1) +" 条检索结果摘要的长度为(含高亮HTML代码):"+highLightText.length()); System.out.println(str); System.out.println("+++++++"+highlighter); } catch (InvalidTokenOffsetsException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { System.out.println("没有查到结!"); } } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (CorruptIndexException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 官方文章:http://www.liuzm.com/article/java/91111b.htm 官方博客:http://www.liuzm.com 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |