Example #1
0
  final Document doc(int n, FieldSelector fieldSelector) throws IOException {
    indexStream.seek(n * 8L);
    long position = indexStream.readLong();
    fieldsStream.seek(position);

    Document doc = new Document();
    int numFields = fieldsStream.readVInt();
    for (int i = 0; i < numFields; i++) {
      int fieldNumber = fieldsStream.readVInt();
      FieldInfo fi = fieldInfos.fieldInfo(fieldNumber);
      FieldSelectorResult acceptField =
          fieldSelector == null ? FieldSelectorResult.LOAD : fieldSelector.accept(fi.name);

      byte bits = fieldsStream.readByte();
      boolean compressed = (bits & FieldsWriter.FIELD_IS_COMPRESSED) != 0;
      boolean tokenize = (bits & FieldsWriter.FIELD_IS_TOKENIZED) != 0;
      boolean binary = (bits & FieldsWriter.FIELD_IS_BINARY) != 0;
      // TODO: Find an alternative approach here if this list continues to grow beyond the
      // list of 5 or 6 currently here.  See Lucene 762 for discussion
      if (acceptField.equals(FieldSelectorResult.LOAD)) {
        addField(doc, fi, binary, compressed, tokenize);
      } else if (acceptField.equals(FieldSelectorResult.LOAD_FOR_MERGE)) {
        addFieldForMerge(doc, fi, binary, compressed, tokenize);
      } else if (acceptField.equals(FieldSelectorResult.LOAD_AND_BREAK)) {
        addField(doc, fi, binary, compressed, tokenize);
        break; // Get out of this loop
      } else if (acceptField.equals(FieldSelectorResult.LAZY_LOAD)) {
        addFieldLazy(doc, fi, binary, compressed, tokenize);
      } else if (acceptField.equals(FieldSelectorResult.SIZE)) {
        skipField(binary, compressed, addFieldSize(doc, fi, binary, compressed));
      } else if (acceptField.equals(FieldSelectorResult.SIZE_AND_BREAK)) {
        addFieldSize(doc, fi, binary, compressed);
        break;
      } else {
        skipField(binary, compressed);
      }
    }

    return doc;
  }
 public MultiFieldSelector add(FieldSelector fs) {
   fss.put(fs.getDescriptor(), fs);
   return this;
 }