extensions/net.sf.basedb.varsearch/trunk/src/net/sf/basedb/varsearch/query/ComparableQueryField.java

Code
Comments
Other
Rev Date Author Line
6172 18 Mar 21 nicklas 1 package net.sf.basedb.varsearch.query;
6172 18 Mar 21 nicklas 2
6172 18 Mar 21 nicklas 3 import org.apache.lucene.index.Term;
6172 18 Mar 21 nicklas 4 import org.apache.lucene.search.Query;
6172 18 Mar 21 nicklas 5
6172 18 Mar 21 nicklas 6 /**
6172 18 Mar 21 nicklas 7   Helper implementation for comparable fields. Eg. fields where the values can be
6172 18 Mar 21 nicklas 8   compared with '>' and '<'. The newTermQuery() method handles various operates and
6172 18 Mar 21 nicklas 9   convert them to range queries. If no operator is present the newExactQuery() method
6172 18 Mar 21 nicklas 10   is called. This should be implemented by subclasses.
6172 18 Mar 21 nicklas 11   
6172 18 Mar 21 nicklas 12   @author nicklas
6172 18 Mar 21 nicklas 13 */
6172 18 Mar 21 nicklas 14 public abstract class ComparableQueryField 
6172 18 Mar 21 nicklas 15   extends QueryField
6172 18 Mar 21 nicklas 16 {
6172 18 Mar 21 nicklas 17   
6172 18 Mar 21 nicklas 18   protected ComparableQueryField()
6172 18 Mar 21 nicklas 19   {}
6172 18 Mar 21 nicklas 20
6172 18 Mar 21 nicklas 21   @Override
6172 18 Mar 21 nicklas 22   public Query newTermQuery(Term term) 
6172 18 Mar 21 nicklas 23   {
6172 18 Mar 21 nicklas 24     String field = term.field();
6172 18 Mar 21 nicklas 25     String val = term.bytes().utf8ToString();
6172 18 Mar 21 nicklas 26     Query q = null;
6172 18 Mar 21 nicklas 27     if (val.startsWith(">="))
6172 18 Mar 21 nicklas 28     {
6172 18 Mar 21 nicklas 29       q = newRangeQuery(field, val.substring(2), null, true, true);
6172 18 Mar 21 nicklas 30     }
6172 18 Mar 21 nicklas 31     else if (val.startsWith(">"))
6172 18 Mar 21 nicklas 32     {
6172 18 Mar 21 nicklas 33       q = newRangeQuery(field, val.substring(1), null, false, true);
6172 18 Mar 21 nicklas 34     }
6172 18 Mar 21 nicklas 35     else if (val.startsWith("<="))
6172 18 Mar 21 nicklas 36     {
6172 18 Mar 21 nicklas 37       q = newRangeQuery(field, null, val.substring(2), true, true);
6172 18 Mar 21 nicklas 38     }
6172 18 Mar 21 nicklas 39     else if (val.startsWith("<"))
6172 18 Mar 21 nicklas 40     {
6172 18 Mar 21 nicklas 41       q = newRangeQuery(field, null, val.substring(1), true, false);
6172 18 Mar 21 nicklas 42     }
6172 18 Mar 21 nicklas 43     else
6172 18 Mar 21 nicklas 44     {
6172 18 Mar 21 nicklas 45       q = newExactQuery(field, val);
6172 18 Mar 21 nicklas 46     }
6172 18 Mar 21 nicklas 47     return q;
6172 18 Mar 21 nicklas 48   }
6172 18 Mar 21 nicklas 49
6172 18 Mar 21 nicklas 50   /**
6172 18 Mar 21 nicklas 51     Create a new query that searches for an exact value.
6172 18 Mar 21 nicklas 52   */
6172 18 Mar 21 nicklas 53   public abstract Query newExactQuery(String field, String value);
6172 18 Mar 21 nicklas 54
6172 18 Mar 21 nicklas 55   
6172 18 Mar 21 nicklas 56 }