blob: 44737a35b2264be95e865aed5ad071953fcef937 [file] [log] [blame]
/*
* 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.luke.models.documents;
import java.io.IOException;
import java.util.Objects;
import org.apache.lucene.index.DocValuesType;
import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.IndexOptions;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexableField;
import org.apache.lucene.index.MultiDocValues;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.util.BytesRef;
/**
* Holder for a document field's information and data.
*/
public final class DocumentField {
// field name
private String name;
// index options
private IndexOptions idxOptions;
private boolean hasTermVectors;
private boolean hasPayloads;
private boolean hasNorms;
private long norm;
// stored value
private boolean isStored;
private String stringValue;
private BytesRef binaryValue;
private Number numericValue;
// doc values
private DocValuesType dvType;
// point values
private int pointDimensionCount;
private int pointNumBytes;
static DocumentField of(FieldInfo finfo, IndexReader reader, int docId)
throws IOException {
return of(finfo, null, reader, docId);
}
static DocumentField of(FieldInfo finfo, IndexableField field, IndexReader reader, int docId)
throws IOException {
Objects.requireNonNull(finfo);
Objects.requireNonNull(reader);
DocumentField dfield = new DocumentField();
dfield.name = finfo.name;
dfield.idxOptions = finfo.getIndexOptions();
dfield.hasTermVectors = finfo.hasVectors();
dfield.hasPayloads = finfo.hasPayloads();
dfield.hasNorms = finfo.hasNorms();
if (finfo.hasNorms()) {
NumericDocValues norms = MultiDocValues.getNormValues(reader, finfo.name);
if (norms.advanceExact(docId)) {
dfield.norm = norms.longValue();
}
}
dfield.dvType = finfo.getDocValuesType();
dfield.pointDimensionCount = finfo.getPointDimensionCount();
dfield.pointNumBytes = finfo.getPointNumBytes();
if (field != null) {
dfield.isStored = field.fieldType().stored();
dfield.stringValue = field.stringValue();
if (field.binaryValue() != null) {
dfield.binaryValue = BytesRef.deepCopyOf(field.binaryValue());
}
dfield.numericValue = field.numericValue();
}
return dfield;
}
public String getName() {
return name;
}
public IndexOptions getIdxOptions() {
return idxOptions;
}
public boolean hasTermVectors() {
return hasTermVectors;
}
public boolean hasPayloads() {
return hasPayloads;
}
public boolean hasNorms() {
return hasNorms;
}
public long getNorm() {
return norm;
}
public boolean isStored() {
return isStored;
}
public String getStringValue() {
return stringValue;
}
public BytesRef getBinaryValue() {
return binaryValue;
}
public Number getNumericValue() {
return numericValue;
}
public DocValuesType getDvType() {
return dvType;
}
public int getPointDimensionCount() {
return pointDimensionCount;
}
public int getPointNumBytes() {
return pointNumBytes;
}
@Override
public String toString() {
return "DocumentField{" +
"name='" + name + '\'' +
", idxOptions=" + idxOptions +
", hasTermVectors=" + hasTermVectors +
", isStored=" + isStored +
", dvType=" + dvType +
", pointDimensionCount=" + pointDimensionCount +
'}';
}
private DocumentField() {
}
}