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;
}
};