Lucene 2 4 + Highlighter 2 4 的分页+高亮显示代码例子

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

 

 

这个在我的搜索引擎里用的就是这个。

 

 

  1. package com.laozizhu.search.demo;  
  2. import net.paoding.analysis.analyzer.PaodingAnalyzer;  
  3. import org.apache.lucene.analysis.Analyzer;  
  4. import org.apache.lucene.document.Document;  
  5. import org.apache.lucene.queryParser.MultiFieldQueryParser;  
  6. import org.apache.lucene.search.BooleanClause;  
  7. import org.apache.lucene.search.IndexSearcher;  
  8. import org.apache.lucene.search.Query;  
  9. import org.apache.lucene.search.ScoreDoc;  
  10. import org.apache.lucene.search.TopDocCollector;  
  11. import org.apache.lucene.search.highlight.Highlighter;  
  12. import org.apache.lucene.search.highlight.QueryScorer;  
  13. import org.apache.lucene.search.highlight.SimpleFragmenter;  
  14. import org.apache.lucene.search.highlight.SimpleHTMLFormatter;  
  15. /** 
  16.  * Lucene 2.4 + Highlighter 2.4 的分页+高亮显示代码例子.<br> 
  17.  * 高亮的css自己写吧。 
  18.  *  
  19.  * @author 老紫竹研究室(laozizhu.com) 
  20.  */  
  21. public class TestLuceneHighlighter {  
  22.   private static final String FIELD_TITLE = "title";  
  23.   private static final String FIELD_BODY = "body";  
  24.   public synchronized Analyzer getAnalyzer() {  
  25.     return new PaodingAnalyzer();  
  26.   }  
  27.   public void test(String queryString, int begin, int number) {  
  28.     IndexSearcher isearcher = null;  
  29.     try {  
  30.       isearcher = new IndexSearcher("d:/index");  
  31.       /* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行 */  
  32.       BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD };  
  33.       TopDocCollector collector = new TopDocCollector(10);  
  34.       Query query = MultiFieldQueryParser.parse(queryString, new String[] { FIELD_TITLE, FIELD_BODY }, clauses, getAnalyzer());  
  35.       isearcher.search(query, collector);  
  36.       ScoreDoc[] hits = collector.topDocs().scoreDocs;  
  37.       // 用这个进行高亮显示,默认是<b>..</b>  
  38.       // 用这个指定<read>..</read>  
  39.       SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<read>""</read>");  
  40.       // 构造高亮  
  41.       // 指定高亮的格式  
  42.       // 指定查询评分  
  43.       Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));  
  44.       // 这个一般等于你要返回的,高亮的数据长度  
  45.       // 如果太小,则只有数据的开始部分被解析并高亮,且返回的数据也少  
  46.       // 太大,有时太浪费了。  
  47.       highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE));  
  48.       for (int i = begin; i < hits.length && i < begin + number; i++) {  
  49.         Document doc = isearcher.doc(hits[i].doc);  
  50.         // 有三个参数  
  51.         // 分析器  
  52.         // 要解析的字段名  
  53.         // 要解析的数据  
  54.         System.out.println(highlighter.getBestFragment(getAnalyzer(), FIELD_TITLE, doc.get(FIELD_TITLE)));  
  55.       }  
  56.     } catch (Exception e) {  
  57.       e.printStackTrace();  
  58.     } finally {  
  59.       if (isearcher != null) {  
  60.         try {  
  61.           isearcher.close();  
  62.         } catch (Exception e) {  
  63.           e.printStackTrace();  
  64.         }  
  65.       }  
  66.     }  
  67.   }  
package com.laozizhu.search.demo;import net.paoding.analysis.analyzer.PaodingAnalyzer;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.document.Document;import org.apache.lucene.queryParser.MultiFieldQueryParser;import org.apache.lucene.search.BooleanClause;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.TopDocCollector;import org.apache.lucene.search.highlight.Highlighter;import org.apache.lucene.search.highlight.QueryScorer;import org.apache.lucene.search.highlight.SimpleFragmenter;import org.apache.lucene.search.highlight.SimpleHTMLFormatter;/** * Lucene 2.4 + Highlighter 2.4 的分页+高亮显示代码例子.<br> * 高亮的css自己写吧。 *  * @author 老紫竹研究室(laozizhu.com) */public class TestLuceneHighlighter {  private static final String FIELD_TITLE = "title";  private static final String FIELD_BODY = "body";  public synchronized Analyzer getAnalyzer() {    return new PaodingAnalyzer();  }  public void test(String queryString, int begin, int number) {    IndexSearcher isearcher = null;    try {      isearcher = new IndexSearcher("d:/index");      /* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行 */      BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD };      TopDocCollector collector = new TopDocCollector(10);      Query query = MultiFieldQueryParser.parse(queryString, new String[] { FIELD_TITLE, FIELD_BODY }, clauses, getAnalyzer());      isearcher.search(query, collector);      ScoreDoc[] hits = collector.topDocs().scoreDocs;      // 用这个进行高亮显示,默认是<b>..</b>      // 用这个指定<read>..</read>      SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<read>", "</read>");      // 构造高亮      // 指定高亮的格式      // 指定查询评分      Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));      // 这个一般等于你要返回的,高亮的数据长度      // 如果太小,则只有数据的开始部分被解析并高亮,且返回的数据也少      // 太大,有时太浪费了。      highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE));      for (int i = begin; i < hits.length && i < begin + number; i++) {        Document doc = isearcher.doc(hits[i].doc);        // 有三个参数        // 分析器        // 要解析的字段名        // 要解析的数据        System.out.println(highlighter.getBestFragment(getAnalyzer(), FIELD_TITLE, doc.get(FIELD_TITLE)));      }    } catch (Exception e) {      e.printStackTrace();    } finally {      if (isearcher != null) {        try {          isearcher.close();        } catch (Exception e) {          e.printStackTrace();        }      }    }  }

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值