import org.apache.lucene.queryParser.*; 
import org.apache.lucene.search.*; 
import org.apache.lucene.index.*; 
import org.apache.lucene.analysis.*; 
import org.apache.lucene.analysis.standard.*; 
import org.apache.lucene.document.*; 
import org.apache.lucene.store.*; 

public class RangeTest { 
  public static void main(String args[]) throws Exception { 
    Analyzer analyzer = new StandardAnalyzer(); 
    IndexWriter writer = new IndexWriter("index", analyzer, true); 
    
    Document d1 = new Document();
    d1.add(Field.Keyword("id","doc1"));
    d1.add(Field.Keyword("age","30"));
    d1.add(Field.Text("FirstName","John"));
    writer.addDocument(d1);
    
    Document d2 = new Document();
    d2.add(Field.Keyword("id","doc2"));
    d2.add(Field.Keyword("age","40"));
    d2.add(Field.Text("FirstName","Wendy"));
    writer.addDocument(d2);
    
    writer.close();
    
    IndexReader reader = IndexReader.open("index");
    Searcher searcher = new IndexSearcher(reader);

    search(searcher, analyzer, "age:[20-35]");
    search(searcher, analyzer, "age:[35-50]");

    search(searcher, analyzer, "FirstName:[a-k]");
    search(searcher, analyzer, "FirstName:[u-z]");
    search(searcher, analyzer, "FirstName:[adam-larry]");
  }

  private static void search(Searcher searcher, Analyzer analyzer,
                             String queryString) throws Exception {
    Query query = QueryParser.parse(queryString, "id", analyzer);
    Hits hits = searcher.search(query);
    System.out.println(query.toString("id") + ": " + hits.length() + " hits");
    for (int i = 0; i < hits.length(); i++) {
      System.out.println(" " + hits.doc(i).get("id"));
    }
  }
}


