| 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); |
| + } |
| } |