You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2010/06/04 01:43:01 UTC

svn commit: r951210 - /lucene/dev/trunk/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java

Author: yonik
Date: Thu Jun  3 23:43:01 2010
New Revision: 951210

URL: http://svn.apache.org/viewvc?rev=951210&view=rev
Log:
LUCENE-2380: work on faceting speedups after fieldcache conversion - store BytesRef per seg instead of looking it up each comparison

Modified:
    lucene/dev/trunk/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java?rev=951210&r1=951209&r2=951210&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java Thu Jun  3 23:43:01 2010
@@ -99,7 +99,7 @@ class PerSegmentSingleValuedFaceting {
       }
       @Override
       protected boolean lessThan(SegFacet a, SegFacet b) {
-        return a.si.lookup(a.pos, a.tempBR).compareTo(b.si.lookup(b.pos, b.tempBR)) < 0;
+        return a.tempBR.compareTo(b.tempBR) < 0;
       }
     };
 
@@ -137,6 +137,7 @@ class PerSegmentSingleValuedFaceting {
           seg.pos = seg.startTermIndex;
         }
         if (seg.pos < seg.endTermIndex) {
+          seg.si.lookup(seg.pos, seg.tempBR);
           queue.add(seg);
         }
       }
@@ -149,11 +150,17 @@ class PerSegmentSingleValuedFaceting {
       collector = new IndexSortedFacetCollector(offset, limit, mincount);
     }
 
-    final BytesRef tempBR = new BytesRef();
+    BytesRef val = new BytesRef();
 
     while (queue.size() > 0) {
       SegFacet seg = queue.top();
-      BytesRef val = seg.si.lookup(seg.pos, tempBR);
+
+      // make a shallow copy
+      // Is this always safe? Or could the byte[] be changed?
+      val.bytes = seg.tempBR.bytes;
+      val.offset = seg.tempBR.offset;
+      val.length = seg.tempBR.length;
+
       int count = 0;
 
       do {
@@ -166,9 +173,10 @@ class PerSegmentSingleValuedFaceting {
           queue.pop();
           seg = queue.top();
         }  else {
+          seg.si.lookup(seg.pos, seg.tempBR);          
           seg = queue.updateTop();
         }
-      } while (seg != null && val.compareTo(seg.si.lookup(seg.pos, seg.tempBR)) == 0);
+      } while (seg != null && val.compareTo(seg.tempBR) == 0);
 
       boolean stop = collector.collect(val, count);
       if (stop) break;