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/04/07 16:54:50 UTC

svn commit: r762801 - in /lucene/java/trunk/contrib/spatial/src: java/org/apache/lucene/spatial/tier/ test/org/apache/lucene/spatial/tier/

Author: pjaol
Date: Tue Apr  7 14:54:50 2009
New Revision: 762801

URL: http://svn.apache.org/viewvc?rev=762801&view=rev
Log:
Commit LUCENE-1588 DistanceFieldComparatorSource
deprecate BoundaryBoxFilter

Added:
    lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceFieldComparatorSource.java
Modified:
    lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/BoundaryBoxFilter.java
    lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceQueryBuilder.java
    lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceSortSource.java
    lucene/java/trunk/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestCartesian.java

Modified: lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/BoundaryBoxFilter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/BoundaryBoxFilter.java?rev=762801&r1=762800&r2=762801&view=diff
==============================================================================
--- lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/BoundaryBoxFilter.java (original)
+++ lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/BoundaryBoxFilter.java Tue Apr  7 14:54:50 2009
@@ -33,7 +33,8 @@
 /**
  * An implementation of org.apache.lucene.search.RangeFilter that
  * caches values extracted from the index.
- * 
+ * @deprecated
+ * @see CartesianShapeFilter
  */
 public class BoundaryBoxFilter extends Filter {
 

Added: lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceFieldComparatorSource.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceFieldComparatorSource.java?rev=762801&view=auto
==============================================================================
--- lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceFieldComparatorSource.java (added)
+++ lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceFieldComparatorSource.java Tue Apr  7 14:54:50 2009
@@ -0,0 +1,130 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.lucene.spatial.tier;
+
+import java.io.IOException;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.FieldComparator;
+import org.apache.lucene.search.FieldComparatorSource;
+import org.apache.lucene.search.SortField;
+
+public class DistanceFieldComparatorSource extends FieldComparatorSource {
+
+	private static final long serialVersionUID = 1L;
+
+	private DistanceFilter distanceFilter;
+	private DistanceScoreDocLookupComparator dsdlc;
+
+	public DistanceFieldComparatorSource(Filter distanceFilter) {
+
+		this.distanceFilter = (DistanceFilter) distanceFilter;
+
+	}
+
+	public void cleanUp() {
+		distanceFilter = null;
+
+		if (dsdlc != null)
+			dsdlc.cleanUp();
+
+		dsdlc = null;
+	}
+
+	@Override
+	public FieldComparator newComparator(String fieldname,
+			IndexReader[] subReaders, int numHits, int sortPos, boolean reversed)
+			throws IOException {
+		dsdlc = new DistanceScoreDocLookupComparator(distanceFilter, numHits);
+		return dsdlc;
+	}
+
+	private class DistanceScoreDocLookupComparator extends FieldComparator {
+
+		private DistanceFilter distanceFilter;
+		private double[] values;
+		private double bottom;
+
+		public DistanceScoreDocLookupComparator(DistanceFilter distanceFilter, int numHits) {
+			this.distanceFilter = distanceFilter;
+			values = new double[numHits];
+			return;
+		}
+
+		@Override
+		public int compare(int slot1, int slot2) {
+			double a = values[slot1];
+			double b = values[slot2];
+			if (a > b)
+				return 1;
+			if (a < b)
+				return -1;
+
+			return 0;
+		}
+
+	
+
+		public void cleanUp() {
+			distanceFilter = null;
+		}
+
+		@Override
+		public int compareBottom(int doc, float score) {
+			final double v2 = distanceFilter.getDistance(doc);
+      if (bottom > v2) {
+        return 1;
+      } else if (bottom < v2) {
+        return -1;
+      } 
+			return 0;
+		}
+
+		@Override
+		public void copy(int slot, int doc, float score) {
+			values[slot] = distanceFilter.getDistance(doc);
+		}
+
+		@Override
+		public void setBottom(int slot) {
+			this.bottom = values[slot];
+
+		}
+
+		@Override
+		public void setNextReader(IndexReader reader, int docBase, int numSlotsFull)
+				throws IOException {
+			// TODO Auto-generated method stub
+
+		}
+
+		@Override
+		public Comparable<Double> value(int slot) {
+			return values[slot];
+		}
+
+		@Override
+		public int sortType() {
+			
+			return SortField.DOUBLE;
+		}
+	}
+
+}

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=762801&r1=762800&r2=762801&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 Tue Apr  7 14:54:50 2009
@@ -142,6 +142,11 @@
       return new ConstantScoreQuery(getFilter());
   }
 
+  
+  public Query getQuery(Query query){
+  	return new ConstantScoreQuery(getFilter(query));
+  }
+  
   public double getLat() {
     return lat;
   }

Modified: lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceSortSource.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceSortSource.java?rev=762801&r1=762800&r2=762801&view=diff
==============================================================================
--- lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceSortSource.java (original)
+++ lucene/java/trunk/contrib/spatial/src/java/org/apache/lucene/spatial/tier/DistanceSortSource.java Tue Apr  7 14:54:50 2009
@@ -26,6 +26,11 @@
 import org.apache.lucene.search.SortComparatorSource;
 import org.apache.lucene.search.SortField;
 
+/**
+ * 
+ * @deprecated
+ * @see DistanceFieldComparatorSource
+ */
 public class DistanceSortSource implements SortComparatorSource {
 
   private static final long serialVersionUID = 1L;

Modified: lucene/java/trunk/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestCartesian.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestCartesian.java?rev=762801&r1=762800&r2=762801&view=diff
==============================================================================
--- lucene/java/trunk/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestCartesian.java (original)
+++ lucene/java/trunk/contrib/spatial/src/test/org/apache/lucene/spatial/tier/TestCartesian.java Tue Apr  7 14:54:50 2009
@@ -138,9 +138,9 @@
     addPoint(writer,"Iota Club and Cafe",38.8890000,-77.0923000);
     addPoint(writer,"Hilton Washington Embassy Row",38.9103000,-77.0451000);
     addPoint(writer,"HorseFeathers, Bar & Grill", 39.01220000000001, -77.3942);
-    writer.flush();
+   
     writer.commit();
-    //writer.close();
+    writer.close();
   }
   
   public void testRange() throws IOException, InvalidGeoException {
@@ -179,12 +179,12 @@
     // As the radius filter has performed the distance calculations
     // already, pass in the filter to reuse the results.
     // 
-    DistanceSortSource dsort = new DistanceSortSource(dq.distanceFilter);
-    Sort sort = new Sort(new SortField("foo", dsort));
+    DistanceFieldComparatorSource dsort = new DistanceFieldComparatorSource(dq.distanceFilter);
+    Sort sort = new Sort(new SortField("foo", dsort,false));
     
     // Perform the search, using the term query, the serial chain filter, and the
     // distance sort
-    Hits hits = searcher.search(customScore, dq.getFilter()); //,sort);
+    Hits hits = searcher.search(customScore, dq.getFilter(),sort);
 
     int results = hits.length();
     
@@ -206,7 +206,7 @@
 
     assertEquals(14, distances.size());
     assertEquals(7, results);
-    
+    double lastDistance = 0;
     for(int i =0 ; i < results; i++){
       Document d = hits.doc(i);
       
@@ -217,9 +217,11 @@
       
       double distance = DistanceUtils.getInstance().getDistanceMi(lat, lng, rsLat, rsLng);
       double llm = DistanceUtils.getInstance().getLLMDistance(lat, lng, rsLat, rsLng);
-      System.out.println("Name: "+ name +", Distance (res, ortho, harvesine):"+ distance +" |"+ geo_distance +"|"+ llm +" | score "+ hits.score(i));
+      System.out.println("Name: "+ name +", Distance "+ distance); //(res, ortho, harvesine):"+ distance +" |"+ geo_distance +"|"+ llm +" | score "+ hits.score(i));
       assertTrue(Math.abs((distance - llm)) < 1);
       assertTrue((distance < miles ));
+      assertTrue(geo_distance > lastDistance);
+      lastDistance = geo_distance;
     }
   }
   
@@ -302,6 +304,7 @@
 	      System.out.println("Name: "+ name +", Distance (res, ortho, harvesine):"+ distance +" |"+ geo_distance +"|"+ llm +" | score "+ hits.score(i));
 	      assertTrue(Math.abs((distance - llm)) < 1);
 	      assertTrue((distance < miles ));
+	      
 	    }
 	  }