SockServer2.java
上传用户:cctqzzy
上传日期:2022-03-14
资源大小:12198k
文件大小:4k
源码类别:

搜索引擎

开发平台:

Java

  1. package chapter10;
  2. import java.io.*;
  3. import java.net.*;
  4. import org.apache.lucene.document.Field;
  5. import org.apache.lucene.document.Document;
  6. import org.apache.lucene.index.IndexWriter;
  7. import org.apache.lucene.analysis.Analyzer;
  8. import org.apache.lucene.analysis.TokenStream;
  9. import org.apache.lucene.analysis.Token;
  10. import org.apache.lucene.index.*;
  11. import org.apache.lucene.search.*;
  12. import java.io.IOException;
  13. import java.util.Date;
  14. import org.apache.lucene.index.Term;
  15. import org.apache.lucene.document.Field;
  16. import org.apache.lucene.document.Document;
  17. import org.apache.lucene.index.IndexWriter;
  18. import org.apache.lucene.analysis.Analyzer;
  19. import org.apache.lucene.analysis.SimpleAnalyzer;
  20. import org.apache.lucene.search.Query;
  21. import org.apache.lucene.search.Hits;
  22. import org.apache.lucene.search.TermQuery;
  23. import org.apache.lucene.search.IndexSearcher;
  24. import org.apache.lucene.queryParser.*;
  25. import org.apache.lucene.search.highlight.*;
  26. import org.apache.lucene.search.BooleanQuery;
  27. import org.apache.lucene.store.Directory; 
  28. import org.apache.lucene.store.RAMDirectory;
  29. import org.apache.lucene.search.DefaultSimilarity;
  30. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  31. import org.apache.lucene.search.payloads.BoostingTermQuery;
  32. public class SockServer2 extends Thread {
  33.  private Socket socket;
  34.  private BufferedReader in;
  35.  private PrintWriter out;
  36.  private String content;
  37.  private  Lucenesearch searchtool = new Lucenesearch();
  38.  public SockServer2(Socket sock,String strcont)throws IOException {
  39.  socket=sock;
  40.  content=strcont;
  41.  in=new BufferedReader(
  42.  new InputStreamReader(
  43.  socket.getInputStream()));
  44.  out=new PrintWriter(
  45.  new BufferedWriter(
  46.  new OutputStreamWriter(
  47.  socket.getOutputStream())),true);
  48.  start();
  49. }
  50. public void run(){
  51.  try{
  52.  while (true){
  53.  String str=in.readLine();
  54.  if (str.equals("END"))break;
  55.  System.out.println("Echoing:"+str);
  56.  String result = searchtool.search(str);
  57.  out.write(result);
  58.  }
  59.  System.out.println("Closing...");
  60.  }catch(IOException e){ 
  61.  }finally{
  62.  try{
  63.  socket.close();
  64.  }catch(IOException e){}
  65.  }
  66. }
  67. private class Lucenesearch {
  68.  public Lucenesearch(){
  69.   try{
  70.    searcher = new IndexSearcher(IndexReader.open("D:\workshop\pdfindex"));
  71.   }catch(Exception e){
  72.    e.printStackTrace();
  73.   }
  74.  }
  75.  
  76.  //声明一个IndexSearcher对象
  77.  private IndexSearcher searcher = null;
  78.  //声明一个Query对象
  79.  private Query query = null;
  80.  StandardAnalyzer analyzer = new StandardAnalyzer();
  81.  Highlighter highlighter = null;
  82.  public final Hits search(String keyword){
  83.  
  84.   System.out.println("正在检索关键字:"+keyword);
  85.   try{
  86.    QueryParser qp = new QueryParser("title",analyzer);
  87.    query = qp.parse(keyword);
  88.    Term term = new Term("content",keyword);
  89.    FuzzyQuery fq = new FuzzyQuery(term);
  90.    Date start = new Date();
  91.    Hits hits = searcher.search(query);
  92.    SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<read>","</read>");   
  93.    highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));      
  94.    highlighter.setTextFragmenter(new SimpleFragmenter(10));
  95.    Date end = new Date();
  96.    return hits;
  97.   }catch(Exception e){
  98.    e.printStackTrace();
  99.    return null;
  100.   }
  101.  }
  102.  
  103.  public String exportResult(Hits h){
  104.  String result = null;
  105.   if(h.length() == 0){
  106.    System.out.println("未发现结果.");
  107.    result = "未发现结果.";
  108.   }else{
  109.    for(int i = 0; i < h.length(); i++){
  110.     try{
  111.      Document doc = h.doc(i);
  112.      result = result + doc.get("content");
  113.      TokenStream tokenStream =
  114.       analyzer.tokenStream("content", new StringReader(doc.get("title")));
  115.     }catch(Exception e){
  116.      e.printStackTrace();
  117.     }
  118.    }
  119.   }
  120.   System.out.println("--------------------------------------");
  121.  }
  122.   return result;
  123. }
  124.  public void printResult(Hits h){
  125.   if(h.length() == 0){
  126.    System.out.println("未发现结果.");
  127.   }else{
  128.    for(int i = 0; i < h.length(); i++){
  129.     try{
  130.      Document doc = h.doc(i);
  131.      TokenStream tokenStream =analyzer.tokenStream("content", new StringReader(doc.get("title")));
  132.     }catch(Exception e){
  133.      e.printStackTrace();
  134.     }
  135.    }
  136.   }
  137.   System.out.println("--------------------------------------");
  138.  }
  139. }
  140. }