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/08 16:25:35 UTC

svn commit: r1199285 - in /lucene/dev/branches/lucene2621: lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/ lucene/src/java/org/apache/lucene/document/ lucene/src/java/org/apache/lucene/index/ lucene/src/java/org/apache/luc...

Author: rmuir
Date: Tue Nov  8 15:25:35 2011
New Revision: 1199285

URL: http://svn.apache.org/viewvc?rev=1199285&view=rev
Log:
LUCENE-2621: remove IndexInput from stored fields API

Modified:
    lucene/dev/branches/lucene2621/lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragmentsBuilder.java
    lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/document/DocumentStoredFieldVisitor.java
    lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/StoredFieldVisitor.java
    lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/DefaultFieldsReader.java
    lucene/dev/branches/lucene2621/modules/benchmark/src/java/org/apache/lucene/benchmark/quality/utils/DocNameExtractor.java
    lucene/dev/branches/lucene2621/modules/facet/src/java/org/apache/lucene/facet/taxonomy/directory/Consts.java
    lucene/dev/branches/lucene2621/solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java

Modified: lucene/dev/branches/lucene2621/lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragmentsBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragmentsBuilder.java?rev=1199285&r1=1199284&r2=1199285&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragmentsBuilder.java (original)
+++ lucene/dev/branches/lucene2621/lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragmentsBuilder.java Tue Nov  8 15:25:35 2011
@@ -32,7 +32,6 @@ import org.apache.lucene.search.highligh
 import org.apache.lucene.search.vectorhighlight.FieldFragList.WeightedFragInfo.SubInfo;
 import org.apache.lucene.search.vectorhighlight.FieldFragList.WeightedFragInfo;
 import org.apache.lucene.search.vectorhighlight.FieldPhraseList.WeightedPhraseInfo.Toffs;
-import org.apache.lucene.store.IndexInput;
 
 public abstract class BaseFragmentsBuilder implements FragmentsBuilder {
 
@@ -124,20 +123,19 @@ public abstract class BaseFragmentsBuild
     // according to javadoc, doc.getFields(fieldName) cannot be used with lazy loaded field???
     final List<Field> fields = new ArrayList<Field>();
     reader.document(docId, new StoredFieldVisitor() {
+        
         @Override
-        public boolean stringField(FieldInfo fieldInfo, IndexInput in, int numUTF8Bytes) throws IOException {
-          if (fieldInfo.name.equals(fieldName)) {
-            final byte[] b = new byte[numUTF8Bytes];
-            in.readBytes(b, 0, b.length);
-            FieldType ft = new FieldType(TextField.TYPE_STORED);
-            ft.setStoreTermVectors(fieldInfo.storeTermVector);
-            ft.setStoreTermVectorOffsets(fieldInfo.storeOffsetWithTermVector);
-            ft.setStoreTermVectorPositions(fieldInfo.storePositionWithTermVector);
-            fields.add(new Field(fieldInfo.name, new String(b, "UTF-8"), ft));
-          } else {
-            in.seek(in.getFilePointer() + numUTF8Bytes);
-          }
-          return false;
+        public void stringField(FieldInfo fieldInfo, String value) throws IOException {
+          FieldType ft = new FieldType(TextField.TYPE_STORED);
+          ft.setStoreTermVectors(fieldInfo.storeTermVector);
+          ft.setStoreTermVectorOffsets(fieldInfo.storeOffsetWithTermVector);
+          ft.setStoreTermVectorPositions(fieldInfo.storePositionWithTermVector);
+          fields.add(new Field(fieldInfo.name, value, ft));
+        }
+
+        @Override
+        public Status needsField(FieldInfo fieldInfo) throws IOException {
+          return fieldInfo.name.equals(fieldName) ? Status.YES : Status.NO;
         }
       });
     return fields.toArray(new Field[fields.size()]);

Modified: lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/document/DocumentStoredFieldVisitor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/document/DocumentStoredFieldVisitor.java?rev=1199285&r1=1199284&r2=1199285&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/document/DocumentStoredFieldVisitor.java (original)
+++ lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/document/DocumentStoredFieldVisitor.java Tue Nov  8 15:25:35 2011
@@ -24,7 +24,6 @@ import java.util.HashSet;
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.StoredFieldVisitor;
-import org.apache.lucene.store.IndexInput;
 
 /** A {@link StoredFieldVisitor} that creates a {@link
  *  Document} containing all stored fields, or only specific
@@ -57,81 +56,54 @@ public class DocumentStoredFieldVisitor 
   }
 
   @Override
-  public boolean binaryField(FieldInfo fieldInfo, IndexInput in, int numBytes) throws IOException {
-    if (accept(fieldInfo)) {
-      final byte[] b = new byte[numBytes];
-      in.readBytes(b, 0, b.length);
-      doc.add(new BinaryField(fieldInfo.name, b));
-    } else {
-      in.seek(in.getFilePointer() + numBytes);
-    }
-    return false;
+  public void binaryField(FieldInfo fieldInfo, byte[] value, int offset, int length) throws IOException {
+    doc.add(new BinaryField(fieldInfo.name, value));
   }
 
   @Override
-  public boolean stringField(FieldInfo fieldInfo, IndexInput in, int numUTF8Bytes) throws IOException {
-    if (accept(fieldInfo)) {
-      final byte[] b = new byte[numUTF8Bytes];
-      in.readBytes(b, 0, b.length);
-      final FieldType ft = new FieldType(TextField.TYPE_STORED);
-      ft.setStoreTermVectors(fieldInfo.storeTermVector);
-      ft.setStoreTermVectorPositions(fieldInfo.storePositionWithTermVector);
-      ft.setStoreTermVectorOffsets(fieldInfo.storeOffsetWithTermVector);
-      ft.setStoreTermVectors(fieldInfo.storeTermVector);
-      ft.setIndexed(fieldInfo.isIndexed);
-      ft.setOmitNorms(fieldInfo.omitNorms);
-      ft.setIndexOptions(fieldInfo.indexOptions);
-      doc.add(new Field(fieldInfo.name,
-          new String(b, "UTF-8"), ft
-      ));
-    } else {
-      in.seek(in.getFilePointer() + numUTF8Bytes);
-    }
-    return false;
+  public void stringField(FieldInfo fieldInfo, String value) throws IOException {
+    final FieldType ft = new FieldType(TextField.TYPE_STORED);
+    ft.setStoreTermVectors(fieldInfo.storeTermVector);
+    ft.setStoreTermVectorPositions(fieldInfo.storePositionWithTermVector);
+    ft.setStoreTermVectorOffsets(fieldInfo.storeOffsetWithTermVector);
+    ft.setStoreTermVectors(fieldInfo.storeTermVector);
+    ft.setIndexed(fieldInfo.isIndexed);
+    ft.setOmitNorms(fieldInfo.omitNorms);
+    ft.setIndexOptions(fieldInfo.indexOptions);
+    doc.add(new Field(fieldInfo.name, value, ft));
   }
 
   @Override
-  public boolean intField(FieldInfo fieldInfo, int value) {
-    if (accept(fieldInfo)) {
-      FieldType ft = new FieldType(NumericField.TYPE_STORED);
-      ft.setIndexed(fieldInfo.isIndexed);
-      doc.add(new NumericField(fieldInfo.name, ft).setIntValue(value));
-    }
-    return false;
+  public void intField(FieldInfo fieldInfo, int value) {
+    FieldType ft = new FieldType(NumericField.TYPE_STORED);
+    ft.setIndexed(fieldInfo.isIndexed);
+    doc.add(new NumericField(fieldInfo.name, ft).setIntValue(value));
   }
 
   @Override
-  public boolean longField(FieldInfo fieldInfo, long value) {
-    if (accept(fieldInfo)) {
-      FieldType ft = new FieldType(NumericField.TYPE_STORED);
-      ft.setIndexed(fieldInfo.isIndexed);
-      doc.add(new NumericField(fieldInfo.name, ft).setLongValue(value));
-    }
-    return false;
+  public void longField(FieldInfo fieldInfo, long value) {
+    FieldType ft = new FieldType(NumericField.TYPE_STORED);
+    ft.setIndexed(fieldInfo.isIndexed);
+    doc.add(new NumericField(fieldInfo.name, ft).setLongValue(value));
   }
 
   @Override
-  public boolean floatField(FieldInfo fieldInfo, float value) {
-    if (accept(fieldInfo)) {
-      FieldType ft = new FieldType(NumericField.TYPE_STORED);
-      ft.setIndexed(fieldInfo.isIndexed);
-      doc.add(new NumericField(fieldInfo.name, ft).setFloatValue(value));
-    }
-    return false;
+  public void floatField(FieldInfo fieldInfo, float value) {
+    FieldType ft = new FieldType(NumericField.TYPE_STORED);
+    ft.setIndexed(fieldInfo.isIndexed);
+    doc.add(new NumericField(fieldInfo.name, ft).setFloatValue(value));
   }
 
   @Override
-  public boolean doubleField(FieldInfo fieldInfo, double value) {
-    if (accept(fieldInfo)) {
-      FieldType ft = new FieldType(NumericField.TYPE_STORED);
-      ft.setIndexed(fieldInfo.isIndexed);
-      doc.add(new NumericField(fieldInfo.name, ft).setDoubleValue(value));
-    }
-    return false;
+  public void doubleField(FieldInfo fieldInfo, double value) {
+    FieldType ft = new FieldType(NumericField.TYPE_STORED);
+    ft.setIndexed(fieldInfo.isIndexed);
+    doc.add(new NumericField(fieldInfo.name, ft).setDoubleValue(value));
   }
 
-  private boolean accept(FieldInfo fieldInfo) {
-    return fieldsToAdd == null || fieldsToAdd.contains(fieldInfo.name);
+  @Override
+  public Status needsField(FieldInfo fieldInfo) throws IOException {
+    return fieldsToAdd == null || fieldsToAdd.contains(fieldInfo.name) ? Status.YES : Status.NO;
   }
 
   public Document getDocument() {

Modified: lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/StoredFieldVisitor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/StoredFieldVisitor.java?rev=1199285&r1=1199284&r2=1199285&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/StoredFieldVisitor.java (original)
+++ lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/StoredFieldVisitor.java Tue Nov  8 15:25:35 2011
@@ -21,7 +21,6 @@ import java.io.IOException;
 
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.DocumentStoredFieldVisitor;
-import org.apache.lucene.store.IndexInput;
 
 /**
  * Expert: provides a low-level means of accessing the stored field
@@ -35,54 +34,39 @@ import org.apache.lucene.store.IndexInpu
  *
  * @lucene.experimental */
 
-public class StoredFieldVisitor {
-  /** Process a binary field.  Note that if you want to
-   *  skip the field you must seek the IndexInput
-   *  (e.g., call <code>in.seek(numUTF8Bytes + in.getFilePointer()</code>)
-   *
-   *  <p>Return true to stop loading fields. */
-  public boolean binaryField(FieldInfo fieldInfo, IndexInput in, int numBytes) throws IOException {
-    in.seek(in.getFilePointer() + numBytes);
-    return false;
-  }
-
-  /** Process a string field by reading numUTF8Bytes.
-   *  Note that if you want to skip the field you must
-   *  seek the IndexInput as if you had read numBytes by
-   *  (e.g., call <code>in.seek(numUTF8Bytes + in.getFilePointer()</code>)
-   *
-   *  <p>Return true to stop loading fields. */
-  public boolean stringField(FieldInfo fieldInfo, IndexInput in, int numUTF8Bytes) throws IOException {
-    in.seek(in.getFilePointer() + numUTF8Bytes);
-    return false;
-  }
-
-  /** Process a int numeric field.
-   *
-   *  <p>Return true to stop loading fields. */
-  public boolean intField(FieldInfo fieldInfo, int value) throws IOException {
-    return false;
-  }
-
-  /** Process a long numeric field.
-   *
-   *  <p>Return true to stop loading fields. */
-  public boolean longField(FieldInfo fieldInfo, long value) throws IOException {
-    return false;
-  }
-
-  /** Process a float numeric field.
-   *
-   *  <p>Return true to stop loading fields. */
-  public boolean floatField(FieldInfo fieldInfo, float value) throws IOException {
-    return false;
-  }
-
-  /** Process a double numeric field.
-   *
-   *  <p>Return true to stop loading fields. */
-  public boolean doubleField(FieldInfo fieldInfo, double value) throws IOException {
-    return false;
+public abstract class StoredFieldVisitor {
+  /** Process a binary field. */
+  public void binaryField(FieldInfo fieldInfo, byte[] value, int offset, int length) throws IOException {
   }
-}
 
+  /** Process a string field */
+  public void stringField(FieldInfo fieldInfo, String value) throws IOException {
+  }
+
+  /** Process a int numeric field. */
+  public void intField(FieldInfo fieldInfo, int value) throws IOException {
+  }
+
+  /** Process a long numeric field. */
+  public void longField(FieldInfo fieldInfo, long value) throws IOException {
+  }
+
+  /** Process a float numeric field. */
+  public void floatField(FieldInfo fieldInfo, float value) throws IOException {
+  }
+
+  /** Process a double numeric field. */
+  public void doubleField(FieldInfo fieldInfo, double value) throws IOException {
+  }
+  
+  public abstract Status needsField(FieldInfo fieldInfo) throws IOException;
+  
+  public static enum Status {
+    /** yes, i want the field */
+    YES,
+    /** no, i do not */
+    NO,
+    /** stop loading fields for this document entirely */
+    STOP
+  }
+}
\ No newline at end of file

Modified: lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/DefaultFieldsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/DefaultFieldsReader.java?rev=1199285&r1=1199284&r2=1199285&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/DefaultFieldsReader.java (original)
+++ lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/DefaultFieldsReader.java Tue Nov  8 15:25:35 2011
@@ -36,6 +36,7 @@ import org.apache.lucene.util.CloseableT
 import org.apache.lucene.util.IOUtils;
 
 import java.io.Closeable;
+import java.nio.charset.Charset;
 import java.util.Set;
 
 /**
@@ -215,39 +216,70 @@ public final class DefaultFieldsReader e
       int bits = fieldsStream.readByte() & 0xFF;
       assert bits <= (DefaultFieldsWriter.FIELD_IS_NUMERIC_MASK | DefaultFieldsWriter.FIELD_IS_BINARY): "bits=" + Integer.toHexString(bits);
 
-      final boolean binary = (bits & DefaultFieldsWriter.FIELD_IS_BINARY) != 0;
-      final int numeric = bits & DefaultFieldsWriter.FIELD_IS_NUMERIC_MASK;
+      switch(visitor.needsField(fieldInfo)) {
+        case YES:
+          readField(visitor, fieldInfo, bits);
+          break;
+        case NO: 
+          skipField(bits);
+          break;
+        case STOP: 
+          return;
+      }
+    }
+  }
+  
+  static final Charset UTF8 = Charset.forName("UTF-8");
 
-      final boolean doStop;
-      if (binary) {
-        final int numBytes = fieldsStream.readVInt();
-        doStop = visitor.binaryField(fieldInfo, fieldsStream, numBytes);
-      } else if (numeric != 0) {
-        switch(numeric) {
+  private void readField(StoredFieldVisitor visitor, FieldInfo info, int bits) throws IOException {
+    final int numeric = bits & DefaultFieldsWriter.FIELD_IS_NUMERIC_MASK;
+    if (numeric != 0) {
+      switch(numeric) {
         case DefaultFieldsWriter.FIELD_IS_NUMERIC_INT:
-          doStop = visitor.intField(fieldInfo, fieldsStream.readInt());
-          break;
+          visitor.intField(info, fieldsStream.readInt());
+          return;
         case DefaultFieldsWriter.FIELD_IS_NUMERIC_LONG:
-          doStop = visitor.longField(fieldInfo, fieldsStream.readLong());
-          break;
+          visitor.longField(info, fieldsStream.readLong());
+          return;
         case DefaultFieldsWriter.FIELD_IS_NUMERIC_FLOAT:
-          doStop = visitor.floatField(fieldInfo, Float.intBitsToFloat(fieldsStream.readInt()));
-          break;
+          visitor.floatField(info, Float.intBitsToFloat(fieldsStream.readInt()));
+          return;
         case DefaultFieldsWriter.FIELD_IS_NUMERIC_DOUBLE:
-          doStop = visitor.doubleField(fieldInfo, Double.longBitsToDouble(fieldsStream.readLong()));
-          break;
+          visitor.doubleField(info, Double.longBitsToDouble(fieldsStream.readLong()));
+          return;
         default:
           throw new FieldReaderException("Invalid numeric type: " + Integer.toHexString(numeric));
-        }
+      }
+    } else { 
+      final int length = fieldsStream.readVInt();
+      byte bytes[] = new byte[length];
+      fieldsStream.readBytes(bytes, 0, length);
+      if ((bits & DefaultFieldsWriter.FIELD_IS_BINARY) != 0) {
+        visitor.binaryField(info, bytes, 0, bytes.length);
       } else {
-        // Text:
-        final int numUTF8Bytes = fieldsStream.readVInt();
-        doStop = visitor.stringField(fieldInfo, fieldsStream, numUTF8Bytes);
+        visitor.stringField(info, new String(bytes, 0, bytes.length, UTF8));
       }
-
-      if (doStop) {
-        return;
+    }
+  }
+  
+  private void skipField(int bits) throws IOException {
+    final int numeric = bits & DefaultFieldsWriter.FIELD_IS_NUMERIC_MASK;
+    if (numeric != 0) {
+      switch(numeric) {
+        case DefaultFieldsWriter.FIELD_IS_NUMERIC_INT:
+        case DefaultFieldsWriter.FIELD_IS_NUMERIC_FLOAT:
+          fieldsStream.readInt();
+          return;
+        case DefaultFieldsWriter.FIELD_IS_NUMERIC_LONG:
+        case DefaultFieldsWriter.FIELD_IS_NUMERIC_DOUBLE:
+          fieldsStream.readLong();
+          return;
+        default: 
+          throw new FieldReaderException("Invalid numeric type: " + Integer.toHexString(numeric));
       }
+    } else {
+      final int length = fieldsStream.readVInt();
+      fieldsStream.seek(fieldsStream.getFilePointer() + length);
     }
   }
 

Modified: lucene/dev/branches/lucene2621/modules/benchmark/src/java/org/apache/lucene/benchmark/quality/utils/DocNameExtractor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/modules/benchmark/src/java/org/apache/lucene/benchmark/quality/utils/DocNameExtractor.java?rev=1199285&r1=1199284&r2=1199285&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/modules/benchmark/src/java/org/apache/lucene/benchmark/quality/utils/DocNameExtractor.java (original)
+++ lucene/dev/branches/lucene2621/modules/benchmark/src/java/org/apache/lucene/benchmark/quality/utils/DocNameExtractor.java Tue Nov  8 15:25:35 2011
@@ -22,6 +22,7 @@ import java.util.List;
 
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.StoredFieldVisitor;
+import org.apache.lucene.index.StoredFieldVisitor.Status;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.store.IndexInput;
 
@@ -51,15 +52,19 @@ public class DocNameExtractor {
     final List<String> name = new ArrayList<String>();
     searcher.getIndexReader().document(docid, new StoredFieldVisitor() {
         @Override
-        public boolean stringField(FieldInfo fieldInfo, IndexInput in, int numUTF8Bytes) throws IOException {
-          if (fieldInfo.name.equals(docNameField) && name.size() == 0) {
-            final byte[] b = new byte[numUTF8Bytes];
-            in.readBytes(b, 0, b.length);
-            name.add(new String(b, "UTF-8"));
+        public void stringField(FieldInfo fieldInfo, String value) throws IOException {
+          name.add(value);
+        }
+
+        @Override
+        public Status needsField(FieldInfo fieldInfo) throws IOException {
+          if (name.isEmpty()) {
+            return Status.STOP;
+          } else if (fieldInfo.name.equals(docNameField)) {
+            return Status.YES;
           } else {
-            in.seek(in.getFilePointer() + numUTF8Bytes);
+            return Status.NO;
           }
-          return false;
         }
       });
     if (name.size() != 0) {

Modified: lucene/dev/branches/lucene2621/modules/facet/src/java/org/apache/lucene/facet/taxonomy/directory/Consts.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/modules/facet/src/java/org/apache/lucene/facet/taxonomy/directory/Consts.java?rev=1199285&r1=1199284&r2=1199285&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/modules/facet/src/java/org/apache/lucene/facet/taxonomy/directory/Consts.java (original)
+++ lucene/dev/branches/lucene2621/modules/facet/src/java/org/apache/lucene/facet/taxonomy/directory/Consts.java Tue Nov  8 15:25:35 2011
@@ -4,6 +4,7 @@ import java.io.IOException;
 
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.StoredFieldVisitor;
+import org.apache.lucene.index.StoredFieldVisitor.Status;
 import org.apache.lucene.store.IndexInput;
 
 /**
@@ -41,13 +42,13 @@ abstract class Consts {
   public static final class LoadFullPathOnly extends StoredFieldVisitor {
     private String fullPath;
 
-    public boolean stringField(FieldInfo fieldInfo, IndexInput in, int numUTF8Bytes) throws IOException {
-      final byte[] bytes = new byte[numUTF8Bytes];
-      in.readBytes(bytes, 0, bytes.length);
-      fullPath = new String(bytes, "UTF-8");
+    public void stringField(FieldInfo fieldInfo, String value) throws IOException {
+      fullPath = value;
+    }
 
-      // Stop loading:
-      return true;
+    @Override
+    public Status needsField(FieldInfo fieldInfo) throws IOException {
+      return fullPath == null ? Status.YES : Status.STOP;
     }
 
     public String getFullPath() {

Modified: lucene/dev/branches/lucene2621/solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java?rev=1199285&r1=1199284&r2=1199285&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java (original)
+++ lucene/dev/branches/lucene2621/solr/core/src/java/org/apache/solr/handler/component/TermVectorComponent.java Tue Nov  8 15:25:35 2011
@@ -12,6 +12,7 @@ import org.apache.lucene.index.FieldInfo
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.MultiFields;
 import org.apache.lucene.index.StoredFieldVisitor;
+import org.apache.lucene.index.StoredFieldVisitor.Status;
 import org.apache.lucene.index.TermVectorMapper;
 import org.apache.lucene.index.TermVectorOffsetInfo;
 import org.apache.lucene.index.Terms;
@@ -199,33 +200,28 @@ public class TermVectorComponent extends
     final String finalUniqFieldName = uniqFieldName;
 
     final List<String> uniqValues = new ArrayList<String>();
+    
+    // TODO: is this required to be single-valued? if so, we should STOP
+    // once we find it...
     final StoredFieldVisitor getUniqValue = new StoredFieldVisitor() {
       @Override 
-      public boolean stringField(FieldInfo fieldInfo, IndexInput in, int numUTF8Bytes) throws IOException {
-        if (fieldInfo.name.equals(finalUniqFieldName)) {
-          final byte[] b = new byte[numUTF8Bytes];
-          in.readBytes(b, 0, b.length);
-          uniqValues.add(new String(b, "UTF-8"));
-        } else {
-          in.seek(in.getFilePointer() + numUTF8Bytes);
-        }
-        return false;
+      public void stringField(FieldInfo fieldInfo, String value) throws IOException {
+        uniqValues.add(value);
       }
 
       @Override 
-      public boolean intField(FieldInfo fieldInfo, int value) throws IOException {
-        if (fieldInfo.name.equals(finalUniqFieldName)) {
-          uniqValues.add(Integer.toString(value));
-        }
-        return false;
+      public void intField(FieldInfo fieldInfo, int value) throws IOException {
+        uniqValues.add(Integer.toString(value));
       }
 
       @Override 
-      public boolean longField(FieldInfo fieldInfo, long value) throws IOException {
-        if (fieldInfo.name.equals(finalUniqFieldName)) {
-          uniqValues.add(Long.toString(value));
-        }
-        return false;
+      public void longField(FieldInfo fieldInfo, long value) throws IOException {
+        uniqValues.add(Long.toString(value));
+      }
+
+      @Override
+      public Status needsField(FieldInfo fieldInfo) throws IOException {
+        return (fieldInfo.name.equals(finalUniqFieldName)) ? Status.YES : Status.NO;
       }
     };