/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.lucene.document;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import java.util.Set;

import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.StoredFieldVisitor;

A StoredFieldVisitor that creates a Document from stored fields.

This visitor supports loading all stored fields, or only specific requested fields provided from a Set.

This is used by IndexReader.document(int) to load a document.

@lucene.experimental
/** A {@link StoredFieldVisitor} that creates a {@link * Document} from stored fields. * <p> * This visitor supports loading all stored fields, or only specific * requested fields provided from a {@link Set}. * <p> * This is used by {@link IndexReader#document(int)} to load a * document. * * @lucene.experimental */
public class DocumentStoredFieldVisitor extends StoredFieldVisitor { private final Document doc = new Document(); private final Set<String> fieldsToAdd;
Load only fields named in the provided Set<String>.
Params:
  • fieldsToAdd – Set of fields to load, or null (all fields).
/** * Load only fields named in the provided <code>Set&lt;String&gt;</code>. * @param fieldsToAdd Set of fields to load, or <code>null</code> (all fields). */
public DocumentStoredFieldVisitor(Set<String> fieldsToAdd) { this.fieldsToAdd = fieldsToAdd; }
Load only fields named in the provided fields.
/** Load only fields named in the provided fields. */
public DocumentStoredFieldVisitor(String... fields) { fieldsToAdd = new HashSet<>(fields.length); for(String field : fields) { fieldsToAdd.add(field); } }
Load all stored fields.
/** Load all stored fields. */
public DocumentStoredFieldVisitor() { this.fieldsToAdd = null; } @Override public void binaryField(FieldInfo fieldInfo, byte[] value) throws IOException { doc.add(new StoredField(fieldInfo.name, value)); } @Override public void stringField(FieldInfo fieldInfo, byte[] value) throws IOException { final FieldType ft = new FieldType(TextField.TYPE_STORED); ft.setStoreTermVectors(fieldInfo.hasVectors()); ft.setOmitNorms(fieldInfo.omitsNorms()); ft.setIndexOptions(fieldInfo.getIndexOptions()); doc.add(new StoredField(fieldInfo.name, new String(value, StandardCharsets.UTF_8), ft)); } @Override public void intField(FieldInfo fieldInfo, int value) { doc.add(new StoredField(fieldInfo.name, value)); } @Override public void longField(FieldInfo fieldInfo, long value) { doc.add(new StoredField(fieldInfo.name, value)); } @Override public void floatField(FieldInfo fieldInfo, float value) { doc.add(new StoredField(fieldInfo.name, value)); } @Override public void doubleField(FieldInfo fieldInfo, double value) { doc.add(new StoredField(fieldInfo.name, value)); } @Override public Status needsField(FieldInfo fieldInfo) throws IOException { return fieldsToAdd == null || fieldsToAdd.contains(fieldInfo.name) ? Status.YES : Status.NO; }
Retrieve the visited document.
Returns:Document populated with stored fields. Note that only the stored information in the field instances is valid, data such as indexing options, term vector options, etc is not set.
/** * Retrieve the visited document. * @return {@link Document} populated with stored fields. Note that only * the stored information in the field instances is valid, * data such as indexing options, term vector options, * etc is not set. */
public Document getDocument() { return doc; } }