View Javadoc

1   // BSD License (http://www.galagosearch.org/license)
2   package org.galagosearch.core.tools;
3   
4   import org.galagosearch.core.retrieval.*;
5   import java.util.List;
6   import org.galagosearch.core.retrieval.query.Node;
7   import org.galagosearch.core.retrieval.query.SimpleQuery;
8   import org.galagosearch.core.retrieval.query.StructuredQuery;
9   import org.galagosearch.tupleflow.Parameters;
10  
11  /***
12   *
13   * @author trevor
14   */
15  public class BatchSearch {
16      public static Parameters.Value getSmoothing(Parameters parameters) {
17          if (parameters.containsKey("smoothing")) {
18              return parameters.list("smoothing").get(0);
19          }
20  
21          return null;
22      }
23  
24      public static Node parseQuery(String query, Parameters parameters) {
25          String queryType = parameters.get("queryType", "complex");
26  
27          if (queryType.equals("simple")) {
28              return SimpleQuery.parseTree(query);
29          }
30  
31          return StructuredQuery.parse(query);
32      }
33  
34      public static String formatScore(double score) {
35          double difference = Math.abs(score - (int) score);
36  
37          if (difference < 0.00001) {
38              return Integer.toString((int) score);
39          }
40          return String.format("%10.8f", score);
41      }
42  
43      public static void main(String[] args) throws Exception {
44          // read in parameters
45          Parameters parameters = new Parameters(args);
46          List<Parameters.Value> queries = parameters.list("query");
47  
48          // open index
49          // BUGBUG: need to make this generalized
50          Retrieval retrieval = Retrieval.instance(parameters.get("index"));
51  
52          // record results requested
53          int requested = (int) parameters.get("count", 1000);
54  
55          // for each query, run it, get the results, look up the docnos, print in TREC format
56          for (Parameters.Value query : queries) {
57              // parse the query
58              String queryText = query.get("text");
59              Node queryRoot = parseQuery(queryText, parameters);
60  
61              ScoredDocument[] results = retrieval.runQuery(queryRoot, requested);
62  
63              for (int i = 0; i < results.length; i++) {
64                  String document = retrieval.getDocumentName(results[i].document);
65                  double score = results[i].score;
66                  int rank = i + 1;
67  
68                  System.out.format("%s Q0 %s %d %s galago\n", query.get("number"), document, rank,
69                                    formatScore(score));
70              }
71          }
72      }
73  }