blob: 3548141bc97c4143fdd4c04a171e0f826d7b99a8 [file] [log] [blame]
Index: lucene/facet/build.xml
===================================================================
--- lucene/facet/build.xml (revision 1543850)
+++ lucene/facet/build.xml (working copy)
@@ -32,9 +32,10 @@
<path id="classpath">
<path refid="base.classpath"/>
<pathelement path="${queries.jar}"/>
+ <pathelement path="${expressions.jar}"/>
</path>
- <target name="compile-core" depends="jar-queries,common.compile-core" />
+ <target name="compile-core" depends="jar-queries,jar-expressions,common.compile-core" />
<target name="javadocs" depends="javadocs-queries,compile-core">
<invoke-module-javadoc>
Index: lucene/facet/src/test/org/apache/lucene/facet/range/TestRangeAccumulator.java
===================================================================
--- lucene/facet/src/test/org/apache/lucene/facet/range/TestRangeAccumulator.java (revision 1543850)
+++ lucene/facet/src/test/org/apache/lucene/facet/range/TestRangeAccumulator.java (working copy)
@@ -21,6 +21,7 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Set;
import org.apache.lucene.document.Document;
@@ -31,6 +32,9 @@
import org.apache.lucene.document.FloatField;
import org.apache.lucene.document.LongField;
import org.apache.lucene.document.NumericDocValuesField;
+import org.apache.lucene.expressions.Expression;
+import org.apache.lucene.expressions.SimpleBindings;
+import org.apache.lucene.expressions.js.JavascriptCompiler;
import org.apache.lucene.facet.FacetTestCase;
import org.apache.lucene.facet.FacetTestUtils;
import org.apache.lucene.facet.index.FacetFields;
@@ -38,8 +42,8 @@
import org.apache.lucene.facet.params.FacetSearchParams;
import org.apache.lucene.facet.search.CountFacetRequest;
import org.apache.lucene.facet.search.DrillDownQuery;
+import org.apache.lucene.facet.search.DrillSideways.DrillSidewaysResult;
import org.apache.lucene.facet.search.DrillSideways;
-import org.apache.lucene.facet.search.DrillSideways.DrillSidewaysResult;
import org.apache.lucene.facet.search.FacetRequest;
import org.apache.lucene.facet.search.FacetResult;
import org.apache.lucene.facet.search.FacetResultNode;
@@ -57,6 +61,7 @@
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.NumericRangeQuery;
+import org.apache.lucene.search.SortField;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util._TestUtil;
@@ -674,4 +679,48 @@
r.close();
d.close();
}
+
+ public void testDistanceRangeFaceting() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
+
+ Document doc = new Document();
+ doc.add(new DoubleField("latitude", 40.759011, Field.Store.NO));
+ doc.add(new DoubleField("longitude", -73.9844722, Field.Store.NO));
+ writer.addDocument(doc);
+
+ doc = new Document();
+ doc.add(new DoubleField("latitude", 40.718266, Field.Store.NO));
+ doc.add(new DoubleField("longitude", -74.007819, Field.Store.NO));
+ writer.addDocument(doc);
+
+ doc = new Document();
+ doc.add(new DoubleField("latitude", 40.7051157, Field.Store.NO));
+ doc.add(new DoubleField("longitude", -74.0088305, Field.Store.NO));
+ writer.addDocument(doc);
+
+ Expression distance = JavascriptCompiler.compile("haversin(40.7143528,-74.0059731,latitude,longitude)");
+ SimpleBindings bindings = new SimpleBindings();
+ bindings.add(new SortField("latitude", SortField.Type.DOUBLE));
+ bindings.add(new SortField("longitude", SortField.Type.DOUBLE));
+
+ RangeAccumulator a = new RangeAccumulator(new RangeFacetRequest<DoubleRange>("distance",
+ distance.getValueSource(bindings),
+ new DoubleRange("< 1 km", 0.0, true, 1.0, false),
+ new DoubleRange("< 2 km", 0.0, true, 2.0, false),
+ new DoubleRange("< 5 km", 0.0, true, 5.0, false),
+ new DoubleRange("< 10 km", 0.0, true, 10.0, false),
+ new DoubleRange("< 20 km", 0.0, true, 20.0, false),
+ new DoubleRange("< 50 km", 0.0, true, 50.0, false)));
+
+ FacetsCollector fc = FacetsCollector.create(a);
+
+ IndexReader reader = writer.getReader();
+ IndexSearcher searcher = new IndexSearcher(reader);
+ searcher.search(new MatchAllDocsQuery(), fc);
+ List<FacetResult> result = fc.getFacetResults();
+ assertEquals(1, result.size());
+ assertEquals("distance (0)\n < 1 km (1)\n < 2 km (2)\n < 5 km (2)\n < 10 km (3)\n < 20 km (3)\n < 50 km (3)\n", FacetTestUtils.toSimpleString(result.get(0)));
+ IOUtils.close(reader, writer, dir);
+ }
}