| 
0
 | 
     1 
 | 
| 
 | 
     2 package global.web.tools;
 | 
| 
 | 
     3 
 | 
| 
 | 
     4 import java.io.IOException;
 | 
| 
 | 
     5 import java.io.PrintWriter;
 | 
| 
 | 
     6 import javax.servlet.http.HttpServlet;
 | 
| 
 | 
     7 import javax.servlet.http.HttpServletRequest;
 | 
| 
 | 
     8 import javax.servlet.http.HttpServletResponse;
 | 
| 
 | 
     9 import org.slf4j.Logger;
 | 
| 
 | 
    10 import org.slf4j.LoggerFactory;
 | 
| 
 | 
    11 import org.apache.lucene.queryParser.QueryParser;
 | 
| 
 | 
    12 import org.apache.lucene.queryParser.ParseException;
 | 
| 
 | 
    13 import org.apache.lucene.search.IndexSearcher;
 | 
| 
 | 
    14 import org.apache.lucene.search.Query;
 | 
| 
 | 
    15 import org.apache.lucene.search.TopDocs;
 | 
| 
 | 
    16 import org.apache.lucene.search.ScoreDoc;
 | 
| 
 | 
    17 import org.apache.lucene.util.Version;
 | 
| 
 | 
    18 import nabble.view.lib.Jtp;
 | 
| 
 | 
    19 import global.Site;
 | 
| 
 | 
    20 
 | 
| 
 | 
    21 
 | 
| 
 | 
    22 public final class Search extends HttpServlet {
 | 
| 
 | 
    23 	private static final Logger logger = LoggerFactory.getLogger(Search.class);
 | 
| 
 | 
    24 
 | 
| 
 | 
    25 	protected void service(HttpServletRequest request,HttpServletResponse response)
 | 
| 
 | 
    26 		throws IOException
 | 
| 
 | 
    27 	{
 | 
| 
 | 
    28 		PrintWriter out = response.getWriter();
 | 
| 
 | 
    29 		String query = request.getParameter("query");
 | 
| 
 | 
    30 		IndexSearcher searcher;
 | 
| 
 | 
    31 		Query q;
 | 
| 
 | 
    32 		TopDocs hits;
 | 
| 
 | 
    33 		try {
 | 
| 
 | 
    34 			searcher = new IndexSearcher(Site.dir());
 | 
| 
 | 
    35 			QueryParser parser = new QueryParser(Version.LUCENE_CURRENT,Site.SUBJECT_FLD,Site.analyzer);
 | 
| 
 | 
    36 			parser.setDefaultOperator(QueryParser.AND_OPERATOR);
 | 
| 
 | 
    37 			q = parser.parse(query);
 | 
| 
 | 
    38 			hits = searcher.search(q,100);
 | 
| 
 | 
    39 		} catch(IOException e) {
 | 
| 
 | 
    40 			throw new RuntimeException(e);
 | 
| 
 | 
    41 		} catch(ParseException e) {
 | 
| 
 | 
    42 			throw new RuntimeException(e);
 | 
| 
 | 
    43 		}
 | 
| 
 | 
    44 		try {
 | 
| 
 | 
    45 			
 | 
| 
 | 
    46 		out.print( "\r\n<html>\r\n	<head>\r\n		<title>Nabble Search Result</title>\r\n	</head>\r\n	<body>\r\n		<h1>Nabble Search for: " );
 | 
| 
 | 
    47 		out.print( (q) );
 | 
| 
 | 
    48 		out.print( "</h1>\r\n		<h3>showing " );
 | 
| 
 | 
    49 		out.print( (hits.scoreDocs.length) );
 | 
| 
 | 
    50 		out.print( " out of " );
 | 
| 
 | 
    51 		out.print( (hits.totalHits) );
 | 
| 
 | 
    52 		out.print( " results</h3>\r\n		" );
 | 
| 
 | 
    53 
 | 
| 
 | 
    54 					for( ScoreDoc sd : hits.scoreDocs ) {
 | 
| 
 | 
    55 						Site site = new Site( searcher.doc(sd.doc) );
 | 
| 
 | 
    56 						
 | 
| 
 | 
    57 		out.print( "\r\n<p>" );
 | 
| 
 | 
    58 		out.print( (site.link()) );
 | 
| 
 | 
    59 		out.print( "</p>\r\n" );
 | 
| 
 | 
    60 
 | 
| 
 | 
    61 					}
 | 
| 
 | 
    62 					
 | 
| 
 | 
    63 		out.print( "\r\n</body>\r\n</html>\r\n" );
 | 
| 
 | 
    64 
 | 
| 
 | 
    65 		} finally {
 | 
| 
 | 
    66 			searcher.close();
 | 
| 
 | 
    67 		}
 | 
| 
 | 
    68 	}
 | 
| 
 | 
    69 
 | 
| 
 | 
    70 }
 | 
| 
 | 
    71 
 |