You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/11/10 17:53:05 UTC

svn commit: r1200423 - /lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java

Author: rmuir
Date: Thu Nov 10 16:53:05 2011
New Revision: 1200423

URL: http://svn.apache.org/viewvc?rev=1200423&view=rev
Log:
LUCENE-2621: add default termvectors merge() implementation

Modified:
    lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java

Modified: lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java?rev=1200423&r1=1200422&r2=1200423&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java (original)
+++ lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java Thu Nov 10 16:53:05 2011
@@ -20,7 +20,9 @@ package org.apache.lucene.index.codecs;
 import java.io.Closeable;
 import java.io.IOException;
 
+import org.apache.lucene.index.MergeState;
 import org.apache.lucene.index.TermFreqVector;
+import org.apache.lucene.util.Bits;
 
 public abstract class TermVectorsWriter implements Closeable {
   
@@ -32,6 +34,35 @@ public abstract class TermVectorsWriter 
    *  in LUCENE-1282. */
   public abstract void finish(int numDocs) throws IOException;
   
+  /** Merges in the stored fields from the readers in 
+   *  <code>mergeState</code>. The default implementation skips
+   *  over deleted documents, and uses XXX, XXX, and XXX
+   *  returning the number of documents that were written.
+   *  Implementations can override this method for more sophisticated
+   *  merging (bulk-byte copying, etc). */
+  // nocommit: test that I work
+  public int merge(MergeState mergeState) throws IOException {
+    int docCount = 0;
+    for (MergeState.IndexReaderAndLiveDocs reader : mergeState.readers) {
+      final int maxDoc = reader.reader.maxDoc();
+      final Bits liveDocs = reader.liveDocs;
+      for (int i = 0; i < maxDoc; i++) {
+        if (liveDocs != null && !liveDocs.get(i)) {
+          // skip deleted docs
+          continue;
+        }
+        // NOTE: it's very important to first assign to vectors then pass it to
+        // termVectorsWriter.addAllDocVectors; see LUCENE-1282
+        TermFreqVector[] vectors = reader.reader.getTermFreqVectors(i);
+        addAllDocVectors(vectors);
+        docCount++;
+        mergeState.checkAbort.work(300);
+      }
+    }
+    finish(docCount);
+    return docCount;
+  }
+  
   // nocommit: this should be a sugar method only that consumes the normal api (once we have one)
   public abstract void addAllDocVectors(TermFreqVector[] vectors) throws IOException;