Add options so that this is also useful for search benchmarking.

git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@150516 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Doug Cutting 2004-09-16 20:57:05 +00:00
parent e0c8c5a469
commit faebce61db
1 changed files with 97 additions and 47 deletions

View File

@ -18,6 +18,8 @@ package org.apache.lucene.demo;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.FileReader;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer;
@ -29,55 +31,103 @@ import org.apache.lucene.search.Hits;
import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.queryParser.QueryParser;
class SearchFiles { class SearchFiles {
public static void main(String[] args) { public static void main(String[] args) throws Exception {
try { String usage =
Searcher searcher = new IndexSearcher("index"); "java org.apache.lucene.demo.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-raw] ";
Analyzer analyzer = new StandardAnalyzer();
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String index = "index";
while (true) { String field = "contents";
System.out.print("Query: "); String queries = null;
String line = in.readLine(); int repeat = 0;
boolean raw = false;
if (line.length() == -1)
break; for (int i = 0; i < args.length; i++) {
if ("-index".equals(args[i])) {
Query query = QueryParser.parse(line, "contents", analyzer); index = args[i+1];
System.out.println("Searching for: " + query.toString("contents")); i++;
} else if ("-field".equals(args[i])) {
Hits hits = searcher.search(query); field = args[i+1];
System.out.println(hits.length() + " total matching documents"); i++;
} else if ("-queries".equals(args[i])) {
final int HITS_PER_PAGE = 10; queries = args[i+1];
for (int start = 0; start < hits.length(); start += HITS_PER_PAGE) { i++;
int end = Math.min(hits.length(), start + HITS_PER_PAGE); } else if ("-repeat".equals(args[i])) {
for (int i = start; i < end; i++) { repeat = Integer.parseInt(args[i+1]);
Document doc = hits.doc(i); i++;
String path = doc.get("path"); } else if ("-raw".equals(args[i])) {
if (path != null) { raw = true;
System.out.println((i+1) + ". " + path);
String title = doc.get("title");
if (title != null) {
System.out.println(" Title: " + doc.get("title"));
}
} else {
System.out.println((i+1) + ". " + "No path for this document");
}
}
if (hits.length() > end) {
System.out.print("more (y/n) ? ");
line = in.readLine();
if (line.length() == 0 || line.charAt(0) == 'n')
break;
}
}
} }
searcher.close();
} catch (Exception e) {
System.out.println(" caught a " + e.getClass() +
"\n with message: " + e.getMessage());
} }
Searcher searcher = new IndexSearcher(index);
Analyzer analyzer = new StandardAnalyzer();
BufferedReader in = null;
if (queries != null) {
in = new BufferedReader(new FileReader(queries));
} else {
in = new BufferedReader(new InputStreamReader(System.in));
}
while (true) {
if (queries == null) // prompt the user
System.out.print("Query: ");
String line = in.readLine();
if (line == null || line.length() == -1)
break;
Query query = QueryParser.parse(line, field, analyzer);
System.out.println("Searching for: " + query.toString(field));
Hits hits = searcher.search(query);
if (repeat > 0) { // repeat & time as benchmark
Date start = new Date();
for (int i = 0; i < repeat; i++) {
hits = searcher.search(query);
}
Date end = new Date();
System.out.println("Time: "+(end.getTime()-start.getTime())+"ms");
}
System.out.println(hits.length() + " total matching documents");
final int HITS_PER_PAGE = 10;
for (int start = 0; start < hits.length(); start += HITS_PER_PAGE) {
int end = Math.min(hits.length(), start + HITS_PER_PAGE);
for (int i = start; i < end; i++) {
if (raw) { // output raw format
System.out.println("doc="+hits.id(i)+" score="+hits.score(i));
continue;
}
Document doc = hits.doc(i);
String path = doc.get("path");
if (path != null) {
System.out.println((i+1) + ". " + path);
String title = doc.get("title");
if (title != null) {
System.out.println(" Title: " + doc.get("title"));
}
} else {
System.out.println((i+1) + ". " + "No path for this document");
}
}
if (queries != null) // non-interactive
break;
if (hits.length() > end) {
System.out.print("more (y/n) ? ");
line = in.readLine();
if (line.length() == 0 || line.charAt(0) == 'n')
break;
}
}
}
searcher.close();
} }
} }