1
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
45 Parameters parameters = new Parameters(args);
46 List<Parameters.Value> queries = parameters.list("query");
47
48
49
50 Retrieval retrieval = Retrieval.instance(parameters.get("index"));
51
52
53 int requested = (int) parameters.get("count", 1000);
54
55
56 for (Parameters.Value query : queries) {
57
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 }