5 Lucene筆記(五):搜索結果高亮

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);
        }
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章