FileDocCategorySizeDatePackage
FieldInfos.javaAPI DocApache Lucene 2.1.010617Wed Feb 14 10:46:40 GMT 2007org.apache.lucene.index

FieldInfos

public final class FieldInfos extends Object
Access to the Fieldable Info file that describes document fields and whether or not they are indexed. Each segment has a separate Fieldable Info file. Objects of this class are thread-safe for multiple readers, but only one thread can be adding documents at a time, with no other reader or writer threads accessing this object.

Fields Summary
static final byte
IS_INDEXED
static final byte
STORE_TERMVECTOR
static final byte
STORE_POSITIONS_WITH_TERMVECTOR
static final byte
STORE_OFFSET_WITH_TERMVECTOR
static final byte
OMIT_NORMS
private ArrayList
byNumber
private HashMap
byName
Constructors Summary
FieldInfos()


    
FieldInfos(Directory d, String name)
Construct a FieldInfos object using the directory and the name of the file IndexInput

param
d The directory to open the IndexInput from
param
name The name of the file to open the IndexInput from in the Directory
throws
IOException

    IndexInput input = d.openInput(name);
    try {
      read(input);
    } finally {
      input.close();
    }
  
Methods Summary
public voidadd(org.apache.lucene.document.Document doc)
Adds field info for a Document.

    List fields = doc.getFields();
    Iterator fieldIterator = fields.iterator();
    while (fieldIterator.hasNext()) {
      Fieldable field = (Fieldable) fieldIterator.next();
      add(field.name(), field.isIndexed(), field.isTermVectorStored(), field.isStorePositionWithTermVector(),
              field.isStoreOffsetWithTermVector(), field.getOmitNorms());
    }
  
public voidadd(java.util.Collection names, boolean isIndexed)
Assumes the fields are not storing term vectors.

param
names The names of the fields
param
isIndexed Whether the fields are indexed or not
see
#add(String, boolean)

    Iterator i = names.iterator();
    while (i.hasNext()) {
      add((String)i.next(), isIndexed);
    }
  
public voidadd(java.lang.String name, boolean isIndexed)
Calls 5 parameter add with false for all TermVector parameters.

param
name The name of the Fieldable
param
isIndexed true if the field is indexed
see
#add(String, boolean, boolean, boolean, boolean)

    add(name, isIndexed, false, false, false, false);
  
public voidadd(java.lang.String name, boolean isIndexed, boolean storeTermVector)
Calls 5 parameter add with false for term vector positions and offsets.

param
name The name of the field
param
isIndexed true if the field is indexed
param
storeTermVector true if the term vector should be stored

    add(name, isIndexed, storeTermVector, false, false, false);
  
public voidadd(java.lang.String name, boolean isIndexed, boolean storeTermVector, boolean storePositionWithTermVector, boolean storeOffsetWithTermVector)
If the field is not yet known, adds it. If it is known, checks to make sure that the isIndexed flag is the same as was given previously for this field. If not - marks it as being indexed. Same goes for the TermVector parameters.

param
name The name of the field
param
isIndexed true if the field is indexed
param
storeTermVector true if the term vector should be stored
param
storePositionWithTermVector true if the term vector with positions should be stored
param
storeOffsetWithTermVector true if the term vector with offsets should be stored


    add(name, isIndexed, storeTermVector, storePositionWithTermVector, storeOffsetWithTermVector, false);
  
public voidadd(java.lang.String name, boolean isIndexed, boolean storeTermVector, boolean storePositionWithTermVector, boolean storeOffsetWithTermVector, boolean omitNorms)
If the field is not yet known, adds it. If it is known, checks to make sure that the isIndexed flag is the same as was given previously for this field. If not - marks it as being indexed. Same goes for the TermVector parameters.

param
name The name of the field
param
isIndexed true if the field is indexed
param
storeTermVector true if the term vector should be stored
param
storePositionWithTermVector true if the term vector with positions should be stored
param
storeOffsetWithTermVector true if the term vector with offsets should be stored
param
omitNorms true if the norms for the indexed field should be omitted

    FieldInfo fi = fieldInfo(name);
    if (fi == null) {
      addInternal(name, isIndexed, storeTermVector, storePositionWithTermVector, storeOffsetWithTermVector, omitNorms);
    } else {
      if (fi.isIndexed != isIndexed) {
        fi.isIndexed = true;                      // once indexed, always index
      }
      if (fi.storeTermVector != storeTermVector) {
        fi.storeTermVector = true;                // once vector, always vector
      }
      if (fi.storePositionWithTermVector != storePositionWithTermVector) {
        fi.storePositionWithTermVector = true;                // once vector, always vector
      }
      if (fi.storeOffsetWithTermVector != storeOffsetWithTermVector) {
        fi.storeOffsetWithTermVector = true;                // once vector, always vector
      }
      if (fi.omitNorms != omitNorms) {
        fi.omitNorms = false;                // once norms are stored, always store
      }

    }
  
public voidaddIndexed(java.util.Collection names, boolean storeTermVectors, boolean storePositionWithTermVector, boolean storeOffsetWithTermVector)
Add fields that are indexed. Whether they have termvectors has to be specified.

param
names The names of the fields
param
storeTermVectors Whether the fields store term vectors or not
param
storePositionWithTermVector treu if positions should be stored.
param
storeOffsetWithTermVector true if offsets should be stored

    Iterator i = names.iterator();
    while (i.hasNext()) {
      add((String)i.next(), true, storeTermVectors, storePositionWithTermVector, storeOffsetWithTermVector);
    }
  
private voidaddInternal(java.lang.String name, boolean isIndexed, boolean storeTermVector, boolean storePositionWithTermVector, boolean storeOffsetWithTermVector, boolean omitNorms)

    FieldInfo fi =
      new FieldInfo(name, isIndexed, byNumber.size(), storeTermVector, storePositionWithTermVector,
              storeOffsetWithTermVector, omitNorms);
    byNumber.add(fi);
    byName.put(name, fi);
  
public org.apache.lucene.index.FieldInfofieldInfo(java.lang.String fieldName)

    return (FieldInfo) byName.get(fieldName);
  
public org.apache.lucene.index.FieldInfofieldInfo(int fieldNumber)
Return the fieldinfo object referenced by the fieldNumber.

param
fieldNumber
return
the FieldInfo object or null when the given fieldNumber doesn't exist.

    try {
      return (FieldInfo) byNumber.get(fieldNumber);
    }
    catch (IndexOutOfBoundsException ioobe) {
      return null;
    }
  
public java.lang.StringfieldName(int fieldNumber)
Return the fieldName identified by its number.

param
fieldNumber
return
the fieldName or an empty string when the field with the given number doesn't exist.

    try {
      return fieldInfo(fieldNumber).name;
    }
    catch (NullPointerException npe) {
      return "";
    }
  
public intfieldNumber(java.lang.String fieldName)

    try {
      FieldInfo fi = fieldInfo(fieldName);
      if (fi != null)
        return fi.number;
    }
    catch (IndexOutOfBoundsException ioobe) {
      return -1;
    }
    return -1;
  
public booleanhasVectors()

    boolean hasVectors = false;
    for (int i = 0; i < size(); i++) {
      if (fieldInfo(i).storeTermVector) {
        hasVectors = true;
        break;
      }
    }
    return hasVectors;
  
private voidread(org.apache.lucene.store.IndexInput input)

    int size = input.readVInt();//read in the size
    for (int i = 0; i < size; i++) {
      String name = input.readString().intern();
      byte bits = input.readByte();
      boolean isIndexed = (bits & IS_INDEXED) != 0;
      boolean storeTermVector = (bits & STORE_TERMVECTOR) != 0;
      boolean storePositionsWithTermVector = (bits & STORE_POSITIONS_WITH_TERMVECTOR) != 0;
      boolean storeOffsetWithTermVector = (bits & STORE_OFFSET_WITH_TERMVECTOR) != 0;
      boolean omitNorms = (bits & OMIT_NORMS) != 0;

      addInternal(name, isIndexed, storeTermVector, storePositionsWithTermVector, storeOffsetWithTermVector, omitNorms);
    }    
  
public intsize()

    return byNumber.size();
  
public voidwrite(org.apache.lucene.store.Directory d, java.lang.String name)

    IndexOutput output = d.createOutput(name);
    try {
      write(output);
    } finally {
      output.close();
    }
  
public voidwrite(org.apache.lucene.store.IndexOutput output)

    output.writeVInt(size());
    for (int i = 0; i < size(); i++) {
      FieldInfo fi = fieldInfo(i);
      byte bits = 0x0;
      if (fi.isIndexed) bits |= IS_INDEXED;
      if (fi.storeTermVector) bits |= STORE_TERMVECTOR;
      if (fi.storePositionWithTermVector) bits |= STORE_POSITIONS_WITH_TERMVECTOR;
      if (fi.storeOffsetWithTermVector) bits |= STORE_OFFSET_WITH_TERMVECTOR;
      if (fi.omitNorms) bits |= OMIT_NORMS;
      output.writeString(fi.name);
      output.writeByte(bits);
    }