一个Lucene 2.4.0对搜索结果高亮显示的代码

使用高亮显示时,需要单独引入lucene-highlighter-3.0.0.jar。这个jar包在目录lucene-3.0.0\contrib\highlighter中,把它复制到项目的lib文件夹,并在Java Build Path中添加其引用。
 
导入的package有:
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;

使用Highlighter的搜索代码:
public void searchProgram() { 
    System.out.println("请输入关键字: "); 
    Scanner scanner = new Scanner(System.in); 
    String queryStr = scanner.nextLine(); 
    System.out.println("您输入的关键字是:    " + queryStr); 
    try { 
      IndexSearcher searcher = new IndexSearcher(FSDirectory 
          .open(new File(strIndexPath))); 
      String strField = "content"; 
      QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, 
          strField, new SmartChineseAnalyzer(Version.LUCENE_CURRENT)); 
      Query query = parser.parse(queryStr); 
      System.out.println(query.toString()); 
      TopDocs hits = searcher.search(query, 10); 
      ScoreDoc[] scoreDoc = hits.scoreDocs; 

      // 高亮显示设置 
      Highlighter highlighter = null; 
      SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter( 
          "<read>", "</read>"); 
      highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query)); 
      // 这个100是指定关键字字符串的context的长度,你可以自己设定,因为不可能返回整篇正文内容 
      highlighter.setTextFragmenter(new SimpleFragmenter(100)); 

      Document doc; 
      DBConfigure dbConfigure = new DBConfigure(); 
      dbConfigure.OpenConn(); 
      ResultSet rs = null; 
      String content = ""; 
      for (int index = 0; index < scoreDoc.length; index++) { 
        doc = searcher.doc(scoreDoc[index].doc); 
        System.out.println(doc.getField("URL").stringValue()); 
        System.out.println(doc.getField("title").stringValue()); 

        // 根据URL的MD5值查询数据库中取出相应的正文 
        String URL_MD5 = UrlToFilePath.strMd5(doc.getField("URL") 
            .stringValue().trim(), 1); 
        String sql = "select content from page where url_md5='" 
            + URL_MD5 + "'"; 
        rs = dbConfigure.executeQuery(sql); 
        if (rs.next()) { 
          content = rs.getString("content"); 
        } 
        // 高亮显示摘要 

        TokenStream tokenStream = new SmartChineseAnalyzer(Version.LUCENE_CURRENT).tokenStream("token", 
            new StringReader(content)); 
        System.out.println(highlighter.getBestFragment(tokenStream, content)); 

      } 
    } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
  }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值