You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2017/02/18 10:56:35 UTC
lucene-solr:master: add example of DrillSidways with range facets
Repository: lucene-solr
Updated Branches:
refs/heads/master 19c8ec2bf -> 2b4a1646e
add example of DrillSidways with range facets
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/2b4a1646
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2b4a1646
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2b4a1646
Branch: refs/heads/master
Commit: 2b4a1646ee16076bbffaaa856bc040b9a89ed674
Parents: 19c8ec2
Author: Mike McCandless <mi...@apache.org>
Authored: Sat Feb 18 05:56:22 2017 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Sat Feb 18 05:56:22 2017 -0500
----------------------------------------------------------------------
.../lucene/demo/facet/RangeFacetsExample.java | 41 +++++++++++++++++---
.../lucene/facet/range/RangeFacetCounts.java | 16 ++++++++
2 files changed, 52 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2b4a1646/lucene/demo/src/java/org/apache/lucene/demo/facet/RangeFacetsExample.java
----------------------------------------------------------------------
diff --git a/lucene/demo/src/java/org/apache/lucene/demo/facet/RangeFacetsExample.java b/lucene/demo/src/java/org/apache/lucene/demo/facet/RangeFacetsExample.java
index 8fc7949..75fcc80 100644
--- a/lucene/demo/src/java/org/apache/lucene/demo/facet/RangeFacetsExample.java
+++ b/lucene/demo/src/java/org/apache/lucene/demo/facet/RangeFacetsExample.java
@@ -16,11 +16,15 @@
*/
package org.apache.lucene.demo.facet;
+import java.io.Closeable;
+import java.io.IOException;
+
import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
-import org.apache.lucene.document.LongPoint;
import org.apache.lucene.document.Document;
+import org.apache.lucene.document.LongPoint;
import org.apache.lucene.document.NumericDocValuesField;
import org.apache.lucene.facet.DrillDownQuery;
+import org.apache.lucene.facet.DrillSideways;
import org.apache.lucene.facet.FacetResult;
import org.apache.lucene.facet.Facets;
import org.apache.lucene.facet.FacetsCollector;
@@ -29,17 +33,14 @@ import org.apache.lucene.facet.range.LongRange;
import org.apache.lucene.facet.range.LongRangeFacetCounts;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
+import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
-import java.io.Closeable;
-import java.io.IOException;
-
/** Shows simple usage of dynamic range faceting. */
public class RangeFacetsExample implements Closeable {
@@ -109,6 +110,29 @@ public class RangeFacetsExample implements Closeable {
return searcher.search(q, 10);
}
+ public DrillSideways.DrillSidewaysResult drillSideways(LongRange range) throws IOException {
+ // Passing no baseQuery means we drill down on all
+ // documents ("browse only"):
+ DrillDownQuery q = new DrillDownQuery(getConfig());
+ q.add("timestamp", LongPoint.newRangeQuery("timestamp", range.min, range.max));
+
+ // DrillSideways only handles taxonomy and sorted set drill facets by default; to do range facets we must subclass and override the
+ // buildFacetsResult method.
+ DrillSideways.DrillSidewaysResult result = new DrillSideways(searcher, getConfig(), null, null) {
+ @Override
+ protected Facets buildFacetsResult(FacetsCollector drillDowns, FacetsCollector[] drillSideways, String[] drillSidewaysDims) throws IOException {
+ // If we had other dims we would also compute their drill-down or drill-sideways facets here:
+ assert drillSidewaysDims[0].equals("timestamp");
+ return new LongRangeFacetCounts("timestamp", drillSideways[0],
+ PAST_HOUR,
+ PAST_SIX_HOURS,
+ PAST_DAY);
+ }
+ }.search(q, 10);
+
+ return result;
+ }
+
@Override
public void close() throws IOException {
searcher.getIndexReader().close();
@@ -130,6 +154,13 @@ public class RangeFacetsExample implements Closeable {
TopDocs hits = example.drillDown(example.PAST_SIX_HOURS);
System.out.println(hits.totalHits + " totalHits");
+ System.out.println("\n");
+ System.out.println("Facet drill-sideways example (timestamp/Past six hours):");
+ System.out.println("---------------------------------------------");
+ DrillSideways.DrillSidewaysResult sideways = example.drillSideways(example.PAST_SIX_HOURS);
+ System.out.println(sideways.hits.totalHits + " totalHits");
+ System.out.println(sideways.facets.getTopChildren(10, "timestamp"));
+
example.close();
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2b4a1646/lucene/facet/src/java/org/apache/lucene/facet/range/RangeFacetCounts.java
----------------------------------------------------------------------
diff --git a/lucene/facet/src/java/org/apache/lucene/facet/range/RangeFacetCounts.java b/lucene/facet/src/java/org/apache/lucene/facet/range/RangeFacetCounts.java
index 61ec53f..32a9c56 100644
--- a/lucene/facet/src/java/org/apache/lucene/facet/range/RangeFacetCounts.java
+++ b/lucene/facet/src/java/org/apache/lucene/facet/range/RangeFacetCounts.java
@@ -80,4 +80,20 @@ abstract class RangeFacetCounts extends Facets {
public List<FacetResult> getAllDims(int topN) throws IOException {
return Collections.singletonList(getTopChildren(topN, null));
}
+
+ @Override
+ public String toString() {
+ StringBuilder b = new StringBuilder();
+ b.append("RangeFacetCounts totCount=");
+ b.append(totCount);
+ b.append(":\n");
+ for(int i=0;i<ranges.length;i++) {
+ b.append(" ");
+ b.append(ranges[i].label);
+ b.append(" -> count=");
+ b.append(counts[i]);
+ b.append('\n');
+ }
+ return b.toString();
+ }
}