FileDocCategorySizeDatePackage
FieldInfos.javaAPI DocApache Lucene 1.4.36087Tue Jul 13 16:07:34 BST 2004org.apache.lucene.index

FieldInfos

public final class FieldInfos extends Object
Access to the Field Info file that describes document fields and whether or not they are indexed. Each segment has a separate Field 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
private ArrayList
byNumber
private HashMap
byName
Constructors Summary
FieldInfos()


   
    add("", false);
  
FieldInfos(Directory d, String name)
Construct a FieldInfos object using the directory and the name of the file InputStream

param
d The directory to open the InputStream from
param
name The name of the file to open the InputStream from in the Directory
throws
IOException
see
#read

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

    Enumeration fields = doc.fields();
    while (fields.hasMoreElements()) {
      Field field = (Field) fields.nextElement();
      add(field.name(), field.isIndexed(), field.isTermVectorStored());
    }
  
public voidadd(java.util.Collection names, boolean isIndexed)
Assumes the field is 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();
    int j = 0;
    while (i.hasNext()) {
      add((String)i.next(), isIndexed);
    }
  
public voidadd(java.lang.String name, boolean isIndexed)
Calls three parameter add with false for the storeTermVector parameter

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

    add(name, isIndexed, false);
  
public voidadd(java.lang.String name, boolean isIndexed, boolean storeTermVector)
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 storeTermVector

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

    FieldInfo fi = fieldInfo(name);
    if (fi == null) {
      addInternal(name, isIndexed, storeTermVector);
    } else {
      if (fi.isIndexed != isIndexed) {
        fi.isIndexed = true;                      // once indexed, always index
      }
      if (fi.storeTermVector != storeTermVector) {
        fi.storeTermVector = true;                // once vector, always vector
      }
    }
  
public voidaddIndexed(java.util.Collection names, boolean storeTermVectors)

param
names The names of the fields
param
storeTermVectors Whether the fields store term vectors or not

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

    FieldInfo fi =
      new FieldInfo(name, isIndexed, byNumber.size(), storeTermVector);
    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 (FieldInfo) byNumber.get(fieldNumber);
  
public java.lang.StringfieldName(int fieldNumber)

    return fieldInfo(fieldNumber).name;
  
public intfieldNumber(java.lang.String fieldName)

    FieldInfo fi = fieldInfo(fieldName);
    if (fi != null)
      return fi.number;
    else
      return -1;
  
public booleanhasVectors()

    boolean hasVectors = false;
    for (int i = 0; i < size(); i++) {
      if (fieldInfo(i).storeTermVector)
        hasVectors = true;
    }
    return hasVectors;
  
private voidread(org.apache.lucene.store.InputStream 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 & 0x1) != 0;
      boolean storeTermVector = (bits & 0x2) != 0;
      addInternal(name, isIndexed, storeTermVector);
    }    
  
public intsize()

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

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

    output.writeVInt(size());
    for (int i = 0; i < size(); i++) {
      FieldInfo fi = fieldInfo(i);
      byte bits = 0x0;
      if (fi.isIndexed) bits |= 0x1;
      if (fi.storeTermVector) bits |= 0x2;
      output.writeString(fi.name);
      //Was REMOVE
      //output.writeByte((byte)(fi.isIndexed ? 1 : 0));
      output.writeByte(bits);
    }