FileDocCategorySizeDatePackage
FieldInfos.javaAPI DocApache Lucene 2.2.012125Sat Jun 16 22:20:36 BST 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
static final byte
STORE_PAYLOADS
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 org.apache.lucene.index.FieldInfoadd(java.lang.String name, boolean isIndexed, boolean storeTermVector, boolean storePositionWithTermVector, boolean storeOffsetWithTermVector, boolean omitNorms, boolean storePayloads)
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
param
storePayloads true if payloads should be stored for this field

    FieldInfo fi = fieldInfo(name);
    if (fi == null) {
      return addInternal(name, isIndexed, storeTermVector, storePositionWithTermVector, storeOffsetWithTermVector, omitNorms, storePayloads);
    } 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
      }
      if (fi.storePayloads != storePayloads) {
        fi.storePayloads = true;
      }

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

    add(name, isIndexed, storeTermVector, storePositionWithTermVector,
        storeOffsetWithTermVector, omitNorms, false);
  
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 org.apache.lucene.index.FieldInfoaddInternal(java.lang.String name, boolean isIndexed, boolean storeTermVector, boolean storePositionWithTermVector, boolean storeOffsetWithTermVector, boolean omitNorms, boolean storePayloads)

    FieldInfo fi =
      new FieldInfo(name, isIndexed, byNumber.size(), storeTermVector, storePositionWithTermVector,
              storeOffsetWithTermVector, omitNorms, storePayloads);
    byNumber.add(fi);
    byName.put(name, fi);
    return 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;
      boolean storePayloads = (bits & STORE_PAYLOADS) != 0;
      
      addInternal(name, isIndexed, storeTermVector, storePositionsWithTermVector, storeOffsetWithTermVector, omitNorms, storePayloads);
    }    
  
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;
      if (fi.storePayloads) bits |= STORE_PAYLOADS;
      output.writeString(fi.name);
      output.writeByte(bits);
    }