View Javadoc

1   package net.sf.cantina.search;
2   
3   import net.sf.cantina.ListIterator;
4   import org.apache.lucene.search.Hits;
5   import org.apache.lucene.search.Query;
6   import org.apache.lucene.search.Searcher;
7   import org.apache.lucene.queryParser.QueryParser;
8   import org.apache.lucene.analysis.standard.StandardAnalyzer;
9   import org.apache.log4j.Logger;
10  
11  /***
12   * @author Stephane JAIS
13   */
14  public class LuceneDocumentSearchHandler
15  extends ListIterator
16  {
17    private final static Logger logger = Logger.getLogger(LuceneDocumentSearchHandler.class);
18    Hits itsHits;
19    Query itsQuery;
20    QueryParser itsQueryParser;
21    Searcher itsSearcher;
22  
23    public LuceneDocumentSearchHandler(Searcher searcher, String query)
24    throws Exception
25    {
26      itsSearcher = searcher;
27      itsQueryParser = new QueryParser("content",new StandardAnalyzer());
28      itsQuery = itsQueryParser.parse(query);
29    }
30    public void executeSearch()
31    throws Exception
32    {
33      logger.debug("Executing query: "+itsQuery.toString("content"));
34      itsHits = itsSearcher.search(itsQuery);
35    }
36    public Object getElementAt(int index)
37    throws Exception
38    {
39      logger.debug("Search result explanation: "+itsSearcher.explain(itsQuery,index).toString());
40      return new LuceneDocumentSearchResult(
41        itsHits.doc(index),
42        itsQuery,
43        itsHits.score(index));
44    }
45  
46    public int getSize()
47    {
48      return itsHits.length();
49    }
50  }
51