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