lucene學習—高亮顯示

來源:互聯網
上載者:User

package src;

import java.io.StringReader;
import java.util.Date;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;

import java.util.Date;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
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;

public class LuceneSearch {
 public static void main(String[] args) throws Exception{
  LuceneSearch test = new LuceneSearch();
  //
  Hits h = null;
  h = test.search("顯示 ");
  test.printResult(h);
  
  
  h = test.search("jy*");
  test.printResult(h);
  
  h = test.search("djy");
  test.printResult(h);
  

 }
 public LuceneSearch(){
  try{
   searcher = new IndexSearcher(IndexReader.open("E://lucene//test4//index"));
  }catch(Exception e){
   e.printStackTrace();
  }
 }
 //聲明一個IndexSearcher對象
 private IndexSearcher searcher = null;
 //聲明一個Query對象
 private Query query = null;
 ChineseAnalyzer analyzer = new ChineseAnalyzer();
 Highlighter highlighter = null;
 public final Hits search(String keyword){
  System.out.println("正在檢索關鍵字:"+keyword);
  try{
   QueryParser qp = new QueryParser("title",analyzer);
   query = qp.parse(keyword);
   
   Term term = new Term("content",keyword);
   FuzzyQuery fq = new FuzzyQuery(term);
   Date start = new Date();
   
   //Hits hits = searcher.search(query);
   Hits hits = searcher.search(query);
 
   
   //高亮顯示設定
   SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<read>","</read>");   
   highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));      
   highlighter.setTextFragmenter(new SimpleFragmenter(10));//這個100是指定關鍵字字串的context的長度,你可以自己設定,因為不可能返回整篇本文內容
 
   
   
   Date end = new Date();
   System.out.println("檢索完成,用時"+(end.getTime()-start.getTime())+"毫秒");
   return hits;
  }catch(Exception e){
   e.printStackTrace();
   return null;
  }
  
 }
 
 
 public void printResult(Hits h){
  if(h.length() == 0){
   System.out.println("對不起,沒有找到您要的結果.");
  }else{
   for(int i = 0; i < h.length(); i++){
    try{
     Document doc = h.doc(i);
     System.out.println("這個是"+(i+1)+"個結果:"+doc.get("id")+" title:"+doc.get("title")+"        content:"+doc.get("content"));
     
     //高亮出顯示
     TokenStream tokenStream =analyzer.tokenStream("content", new StringReader(doc.get("title")));
     System.out.println(highlighter.getBestFragment(tokenStream,h.doc(i).get("title")));

     //System.out.println(doc.get("path"));
    }catch(Exception e){
     e.printStackTrace();
    }
   }
  }
  System.out.println("--------------------------------------");
 }
}
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.