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/18 01:23:23 UTC

svn commit: r955785 - in /lucene/dev/trunk: lucene/src/java/org/apache/lucene/index/codecs/standard/ lucene/src/java/org/apache/lucene/search/ lucene/src/java/org/apache/lucene/util/ solr/src/java/org/apache/solr/request/

Author: yonik
Date: Thu Jun 17 23:23:22 2010
New Revision: 955785

URL: http://svn.apache.org/viewvc?rev=955785&view=rev
Log:
LUCENE-2378: add ability to populate BytesRef instances while filling PagedBytes, and make UnInvertedField's TermIndex use this to share a byte[]

Modified:
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/standard/SimpleStandardTermsIndexReader.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/PagedBytes.java
    lucene/dev/trunk/solr/src/java/org/apache/solr/request/UnInvertedField.java

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/standard/SimpleStandardTermsIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/standard/SimpleStandardTermsIndexReader.java?rev=955785&r1=955784&r2=955785&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/standard/SimpleStandardTermsIndexReader.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/standard/SimpleStandardTermsIndexReader.java Thu Jun 17 23:23:22 2010
@@ -137,7 +137,7 @@ public class SimpleStandardTermsIndexRea
         if (success) {
           indexLoaded = true;
         }
-        termBytesReader = termBytes.freeze();
+        termBytesReader = termBytes.freeze(true);
       } else {
         this.in = in;
       }
@@ -413,7 +413,7 @@ public class SimpleStandardTermsIndexRea
 
       indexLoaded = true;
       in.close();
-      termBytesReader = termBytes.freeze();
+      termBytesReader = termBytes.freeze(true);
     }
   }
 

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java?rev=955785&r1=955784&r2=955785&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java Thu Jun 17 23:23:22 2010
@@ -866,7 +866,7 @@ class FieldCacheImpl implements FieldCac
       }
 
       // maybe an int-only impl?
-      return new DocTermsIndexImpl(bytes.freeze(), termOrdToBytesOffset.getMutable(), docToTermOrd.getMutable(), termOrd);
+      return new DocTermsIndexImpl(bytes.freeze(true), termOrdToBytesOffset.getMutable(), docToTermOrd.getMutable(), termOrd);
     }
   }
 
@@ -971,7 +971,7 @@ class FieldCacheImpl implements FieldCac
       }
 
       // maybe an int-only impl?
-      return new DocTermsImpl(bytes.freeze(), docToOffset.getMutable());
+      return new DocTermsImpl(bytes.freeze(true), docToOffset.getMutable());
     }
   }
   private volatile PrintStream infoStream;

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/PagedBytes.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/PagedBytes.java?rev=955785&r1=955784&r2=955785&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/PagedBytes.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/PagedBytes.java Thu Jun 17 23:23:22 2010
@@ -203,8 +203,33 @@ public final class PagedBytes {
     }
   }
 
-  /** Commits final byte[], trimming it if necessary. */
-  public Reader freeze() {
+  /** Copy BytesRef in, setting BytesRef out to the result.
+   * Do not use this if you will use freeze(true).
+   * This only supports bytes.length <= blockSize */
+  public void copy(BytesRef bytes, BytesRef out) throws IOException {
+    int left = blockSize - upto;
+    if (bytes.length > left) {
+      if (currentBlock != null) {
+        blocks.add(currentBlock);
+        blockEnd.add(upto);
+      }
+      currentBlock = new byte[blockSize];
+      upto = 0;
+      left = blockSize;
+      assert bytes.length <= blockSize;
+      // TODO: we could also support variable block sizes
+    }
+
+    out.bytes = currentBlock;
+    out.offset = upto;
+    out.length = bytes.length;
+
+    System.arraycopy(bytes.bytes, bytes.offset, currentBlock, upto, bytes.length);
+    upto += bytes.length;
+  }
+
+  /** Commits final byte[], trimming it if necessary and if trim=true */
+  public Reader freeze(boolean trim) {
     if (upto < blockSize) {
       final byte[] newBlock = new byte[upto];
       System.arraycopy(currentBlock, 0, newBlock, 0, upto);

Modified: lucene/dev/trunk/solr/src/java/org/apache/solr/request/UnInvertedField.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/java/org/apache/solr/request/UnInvertedField.java?rev=955785&r1=955784&r2=955785&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/java/org/apache/solr/request/UnInvertedField.java (original)
+++ lucene/dev/trunk/solr/src/java/org/apache/solr/request/UnInvertedField.java Thu Jun 17 23:23:22 2010
@@ -27,6 +27,7 @@ import org.apache.lucene.index.Terms;
 import org.apache.lucene.index.MultiFields;
 import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.search.TermRangeQuery;
+import org.apache.lucene.util.PagedBytes;
 import org.apache.noggit.CharArr;
 import org.apache.solr.common.params.FacetParams;
 import org.apache.solr.common.util.NamedList;
@@ -1097,6 +1098,7 @@ class TermIndex {
   NumberedTermsEnum getEnumerator(IndexReader reader) throws IOException {
     if (index==null) return new NumberedTermsEnum(reader,this, prefix==null?new BytesRef():prefix, 0) {
       ArrayList<BytesRef> lst;
+      PagedBytes bytes;
 
       protected BytesRef setTerm() throws IOException {
         BytesRef br = super.setTerm();
@@ -1104,8 +1106,11 @@ class TermIndex {
           sizeOfStrings += br.length;
           if (lst==null) {
             lst = new ArrayList<BytesRef>();
+            bytes = new PagedBytes(15);
           }
-          lst.add(new BytesRef(br));
+          BytesRef out = new BytesRef();
+          bytes.copy(br, out);
+          lst.add(out);
         }
         return br;
       }