Ignore:
Timestamp:
2006-07-20T09:02:47+12:00 (18 years ago)
Author:
mdewsnip
Message:

Now returns query terms and their frequencies.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/indexers/lucene-gs/src/org/greenstone/LuceneWrapper/GS2LuceneQuery.java

    r12254 r12256  
    1 /*
    2  * search.java
    3  *
    4  * Created on 25 February 2003, 02:25
    5  */
    6 
    7 
    81/**
    92 *
     
    136 */
    147
    15 import java.io.IOException;
    168import java.io.BufferedReader;
    179import java.io.InputStreamReader;
     10import java.util.HashSet;
     11import java.util.Iterator;
    1812
    1913import org.apache.lucene.analysis.Analyzer;
    2014import org.apache.lucene.analysis.standard.StandardAnalyzer;
    2115import org.apache.lucene.document.Document;
    22 import org.apache.lucene.search.Searcher;
     16import org.apache.lucene.index.IndexReader;
     17import org.apache.lucene.index.Term;
     18import org.apache.lucene.queryParser.QueryParser;
     19import org.apache.lucene.search.Hits;
    2320import org.apache.lucene.search.IndexSearcher;
    2421import org.apache.lucene.search.Query;
    25 import org.apache.lucene.search.Hits;
    26 import org.apache.lucene.queryParser.QueryParser;
    27 import org.apache.lucene.search.TermQuery;
    28 import org.apache.lucene.index.Term;
     22import org.apache.lucene.search.Searcher;
    2923
    30 public class GS2LuceneQuery  {
    3124
    32     public static void main (String args[]) {
    33    
     25public class GS2LuceneQuery
     26{
     27    public static void main (String args[])
     28    {
    3429    if (args.length == 0) {
    3530        System.out.println("Usage: GS2LuceneQuery <index directory>");
    3631        return;
    3732    }
     33
    3834        try {
    3935        Searcher searcher = new IndexSearcher(args[0]);
    4036        Analyzer analyzer = new StandardAnalyzer();
     37        IndexReader reader = ((IndexSearcher) searcher).getIndexReader();
    4138
    4239        BufferedReader in = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));
    4340        while (true) {
    44         String line = in.readLine();
    45        
    46         if (line == null) {
     41        // Read the query from STDIN
     42        String query_string = in.readLine();
     43        if (query_string == null || query_string.length() == -1) {
    4744            break;
    4845        }
     46        System.err.println("**** query = " + query_string);
    4947
    50         if (line.length() == -1)
    51             break;
    52        
     48        // Parse the query and rewrite it into individual terms (eg. for wildcard searches)
     49        QueryParser query_parser = new QueryParser("TX", analyzer);
     50        Query query = query_parser.parse(query_string);
     51        query = query.rewrite(reader);
    5352
    54         // Term term = new Term("TX",line);
    55         // Query query = new TermQuery(term);
    56 
    57         System.err.println("**** query = " + line);
    58 
    59         QueryParser query_parser = new QueryParser("TX", analyzer);
    60         Query query = query_parser.parse(line);
    61        
     53        // Perform the query
    6254        Hits hits = searcher.search(query);
    6355        System.out.println("<ResultSet>");
    6456        System.out.println("  <QueryString>" + query.toString("TX")+"</QueryString>");
    65         System.out.println("  <MatchingDocsInfo num=\""+hits.length()+"\"/>");
    66                
    67         for (int i=0; i< hits.length(); i++) {
     57
     58        // Return the list of expanded query terms and their frequencies
     59        HashSet terms = new HashSet();
     60        query.extractTerms(terms);
     61        Iterator iter = terms.iterator();
     62        while (iter.hasNext()) {
     63            Term term = (Term) iter.next();
     64            System.out.println("  <Term freq=\"" + reader.docFreq(term) + "\">" + term.text() + "</Term>");
     65        }
     66
     67        // Return the matching documents
     68        System.out.println("  <MatchingDocsInfo num=\"" + hits.length() + "\"/>");
     69        for (int i = 0; i < hits.length(); i++) {
    6870            Document doc = hits.doc(i);
    69             String node_id= doc.get("nodeID");
    70             System.out.println("  <Match id=\""+node_id+"\"/>");
     71            String node_id = doc.get("nodeID");
     72            System.out.println("  <Match id=\"" + node_id + "\"/>");
    7173        }
     74
    7275        System.out.println("</ResultSet>");
    73        
    7476        }
    7577       
    7678        searcher.close();
    7779    }
    78     catch (Exception e) {
    79         System.out.println(" caught a " + e.getClass() +
    80                    "\n with message: " + e.getMessage());
     80    catch (Exception exception) {
     81        exception.printStackTrace();
    8182        }
    8283    }
Note: See TracChangeset for help on using the changeset viewer.