5 Lucene笔记(五):搜索结果高亮

来源:互联网 发布:爱淘宝推广链接 编辑:程序博客网 时间:2024/06/05 00:21
packagech.lucene.app;

importjava.util.ArrayList;
importjava.util.List;
importorg.apache.lucene.document.Document;
importorg.apache.lucene.index.IndexWriter;
importorg.apache.lucene.queryParser.QueryParser;
importorg.apache.lucene.search.IndexSearcher;
importorg.apache.lucene.search.Query;
importorg.apache.lucene.search.ScoreDoc;
importorg.apache.lucene.search.TopDocs;
importorg.apache.lucene.search.highlight.Formatter;
importorg.apache.lucene.search.highlight.Highlighter;
importorg.apache.lucene.search.highlight.QueryScorer;
importorg.apache.lucene.search.highlight.Scorer;
importorg.apache.lucene.search.highlight.SimpleHTMLFormatter;
importorg.junit.Test;
importch.lucene.entity.Article;
importch.lucene.utils.LuceneUtils;

publicclassFourApp {
    @Test
    public void createIndexDB()throwsException {
      Articleart= newArticle(1,"标题","搜索标题的内容是什么呢?Lucene学习学习哈哈哈");      
      Documentdoc= LuceneUtils.javaBeanToDocument(art);
      IndexWriterindexWriter=newIndexWriter(LuceneUtils.getDirectory(), LuceneUtils.getAnalyzer(), LuceneUtils.getMaxFieldLength() );
      indexWriter.addDocument( doc);
      indexWriter.close();
  }
    @Test
    public void searchByKeyword ()throwsException{
        String keyword = "标题";    
        List<Article>list= newArrayList<Article>();
        IndexSearcherindexSearcher= newIndexSearcher(LuceneUtils.getDirectory()); 
        QueryParserqueryParser= newQueryParser(LuceneUtils.getVersion(),"content", LuceneUtils.getAnalyzer());
        Query query = queryParser.parse( keyword);  
        TopDocs topDocs = indexSearcher.search( query, 100);
        //格式对象
        Formatterformatter= newSimpleHTMLFormatter("<font color='red'>","</font>" );
       //关键字对象
        Scorerscorer= newQueryScorer(query);
       //高亮对象
        Highlighterhighlighter= newHighlighter(formatter,scorer);
          
        for( int i=0; i< topDocs. scoreDocs. length; i++){
           ScoreDocscoreDoc topDocs.scoreDocs[i];
           int no = scoreDoc. doc;
           Documentdoc= indexSearcher.doc(no);
           //关键字高亮
           StringtitleHighlighter= highlighter.getBestFragment(LuceneUtils.getAnalyzer(),"title",doc.get("title"));
          StringcontentHighlighter= highlighter.getBestFragment(LuceneUtils.getAnalyzer(),"content",doc.get("content"));
         //System.out.println(contentHighlighter+"....");
         //将高亮后结果封装回document对象中
          doc.getField("title").setValue(titleHighlighter);
          doc.getField("content").setValue(contentHighlighter);
           Articlearticle= (Article) LuceneUtils.documentToJavaBean(doc, Article.class);       
           list.add( article);
        }
        for(Article a : list){
            System.out.println(a);
        }
  }
}
0 0