You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by cu...@apache.org on 2004/09/16 22:57:06 UTC

cvs commit: jakarta-lucene/src/demo/org/apache/lucene/demo SearchFiles.java

cutting     2004/09/16 13:57:05

  Modified:    src/demo/org/apache/lucene/demo SearchFiles.java
  Log:
  Add options so that this is also useful for search benchmarking.
  
  Revision  Changes    Path
  1.4       +97 -47    jakarta-lucene/src/demo/org/apache/lucene/demo/SearchFiles.java
  
  Index: SearchFiles.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/demo/org/apache/lucene/demo/SearchFiles.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SearchFiles.java	3 Aug 2004 21:49:24 -0000	1.3
  +++ SearchFiles.java	16 Sep 2004 20:57:05 -0000	1.4
  @@ -18,6 +18,8 @@
   
   import java.io.BufferedReader;
   import java.io.InputStreamReader;
  +import java.io.FileReader;
  +import java.util.Date;
   
   import org.apache.lucene.analysis.Analyzer;
   import org.apache.lucene.analysis.standard.StandardAnalyzer;
  @@ -29,55 +31,103 @@
   import org.apache.lucene.queryParser.QueryParser;
   
   class SearchFiles {
  -  public static void main(String[] args) {
  -    try {
  -      Searcher searcher = new IndexSearcher("index");
  -      Analyzer analyzer = new StandardAnalyzer();
  -
  -      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  -      while (true) {
  -	System.out.print("Query: ");
  -	String line = in.readLine();
  -
  -	if (line.length() == -1)
  -	  break;
  -
  -	Query query = QueryParser.parse(line, "contents", analyzer);
  -	System.out.println("Searching for: " + query.toString("contents"));
  -
  -	Hits hits = searcher.search(query);
  -	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++) {
  -	    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 (hits.length() > end) {
  -	    System.out.print("more (y/n) ? ");
  -	    line = in.readLine();
  -	    if (line.length() == 0 || line.charAt(0) == 'n')
  -	      break;
  -	  }
  -	}
  +  public static void main(String[] args) throws Exception {
  +    String usage =
  +      "java org.apache.lucene.demo.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-raw] ";
  +
  +    String index = "index";
  +    String field = "contents";
  +    String queries = null;
  +    int repeat = 0;
  +    boolean raw = false;
  +    
  +    for (int i = 0; i < args.length; i++) {
  +      if ("-index".equals(args[i])) {
  +        index = args[i+1];
  +        i++;
  +      } else if ("-field".equals(args[i])) {
  +        field = args[i+1];
  +        i++;
  +      } else if ("-queries".equals(args[i])) {
  +        queries = args[i+1];
  +        i++;
  +      } else if ("-repeat".equals(args[i])) {
  +        repeat = Integer.parseInt(args[i+1]);
  +        i++;
  +      } else if ("-raw".equals(args[i])) {
  +        raw = true;
         }
  -      searcher.close();
  +    }
  +    
  +    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");
   
  -    } catch (Exception e) {
  -      System.out.println(" caught a " + e.getClass() +
  -			 "\n with message: " + e.getMessage());
  +      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();
     }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org