You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by pj...@apache.org on 2009/03/21 01:46:28 UTC

svn commit: r756849 - /lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceQueryBuilder.java

Author: pjaol
Date: Sat Mar 21 00:46:27 2009
New Revision: 756849

URL: http://svn.apache.org/viewvc?rev=756849&view=rev
Log:
Fixed NPE for minimal bounding box search
LUCENE-1568

Modified:
    lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceQueryBuilder.java

Modified: lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceQueryBuilder.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceQueryBuilder.java?rev=756849&r1=756848&r2=756849&view=diff
==============================================================================
--- lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceQueryBuilder.java (original)
+++ lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceQueryBuilder.java Sat Mar 21 00:46:27 2009
@@ -37,7 +37,7 @@
   private final double lng;
   private final double miles;
   private Filter cartesianFilter;
-  
+  private boolean needPrecision = true;
   /**
    * Create a distance query using
    * a boundary box wrapper around a more precise
@@ -54,6 +54,7 @@
     this.lat = lat;
     this.lng = lng;
     this.miles = miles;
+    this.needPrecision = needPrecise;
     
     
     CartesianPolyFilterBuilder cpf = new CartesianPolyFilterBuilder(tierFieldPrefix);
@@ -81,7 +82,7 @@
     this.lat = lat;
     this.lng = lng;
     this.miles = miles;
-    
+    this.needPrecision = needPrecise;
     
     CartesianPolyFilterBuilder cpf = new CartesianPolyFilterBuilder(tierFieldPrefix);
     cartesianFilter = cpf.getBoundingArea(lat, lng, (int)miles);
@@ -104,20 +105,37 @@
   * @param miles
   */
   public Filter getFilter() {
-    return new SerialChainFilter(new Filter[] {cartesianFilter, distanceFilter},
-                    new int[] {SerialChainFilter.AND,
-                           SerialChainFilter.SERIALAND});
+	Filter [] f;
+	int [] chain;
+	
+	if (needPrecision){
+		f = new Filter[]{cartesianFilter, distanceFilter};
+		chain = new int[] {SerialChainFilter.AND, 
+				SerialChainFilter.SERIALAND};
+	}else{
+		f= new Filter[]{cartesianFilter};
+		chain = new int[] {SerialChainFilter.AND};
+	}
+    return new SerialChainFilter( f, chain );
   }
   
   public Filter getFilter(Query query) {
     QueryWrapperFilter qf = new QueryWrapperFilter(query);
     
+    Filter [] f;
+    int [] chain;
     
-    return new SerialChainFilter(new Filter[] {cartesianFilter, qf, distanceFilter},
-          new int[] {SerialChainFilter.AND, 
-              SerialChainFilter.AND,
-              SerialChainFilter.SERIALAND});
-  
+	if (needPrecision){
+		f = new Filter[]{cartesianFilter, qf, distanceFilter};
+		chain = new int[] {SerialChainFilter.AND, 
+	              SerialChainFilter.AND,
+	              SerialChainFilter.SERIALAND};
+	}else{
+		f= new Filter[]{cartesianFilter, qf};
+		chain = new int[] {SerialChainFilter.AND, 
+	              SerialChainFilter.AND};
+	}
+    return new SerialChainFilter(f,chain); 
   }
     
   public Query getQuery() {