Skip to content

Commit e16b768

Browse files
committed
Fixing review comments
Signed-off-by: Shreyansh Ray <rayshrey@amazon.com>
1 parent 86bc947 commit e16b768

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

server/src/main/java/org/opensearch/index/mapper/DateFieldMapper.java

+18-4
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import org.opensearch.common.unit.TimeValue;
5757
import org.opensearch.common.util.FeatureFlags;
5858
import org.opensearch.common.util.LocaleUtils;
59+
import org.opensearch.core.xcontent.XContentBuilder;
5960
import org.opensearch.index.compositeindex.datacube.DimensionType;
6061
import org.opensearch.index.fielddata.IndexFieldData;
6162
import org.opensearch.index.fielddata.IndexNumericFieldData.NumericType;
@@ -819,16 +820,29 @@ public Long getNullValue() {
819820
}
820821

821822
@Override
822-
protected String[] deriveSource(LeafReader leafReader, int docId) throws IOException {
823+
protected void deriveSource(XContentBuilder builder, LeafReader leafReader, int docId) throws IOException {
824+
validateDerivedSourceAllowed();
823825
SortedNumericDocValues sortedNumericDocValues = leafReader.getSortedNumericDocValues(name());
824-
if (sortedNumericDocValues.advanceExact(docId)) {
826+
if (sortedNumericDocValues != null && sortedNumericDocValues.advanceExact(docId)) {
825827
int size = sortedNumericDocValues.docValueCount();
826828
String[] values = new String[size];
827829
DateFormatter dateFormatter = fieldType().dateTimeFormatter;
828830
for (int i = 0; i < size; i++)
829831
values[i] = dateFormatter.formatMillis(sortedNumericDocValues.nextValue());
830-
return values;
832+
if (size == 1) {
833+
builder.field(name(), values[0]);
834+
} else {
835+
builder.array(name(), values);
836+
}
837+
}
838+
}
839+
840+
private void validateDerivedSourceAllowed() {
841+
if (this.copyTo() != null && !this.copyTo().copyToFields().isEmpty()) {
842+
throw new UnsupportedOperationException("Unable to derive source for fields with copyTo parameter set");
843+
}
844+
if (mappedFieldType.hasDocValues() == false) {
845+
throw new UnsupportedOperationException("Unable to derive source for fields with docValues disabled");
831846
}
832-
return null;
833847
}
834848
}

server/src/main/java/org/opensearch/index/mapper/FieldMapper.java

+11-4
Original file line numberDiff line numberDiff line change
@@ -572,16 +572,23 @@ protected static String indexOptionToString(IndexOptions indexOption) {
572572

573573
protected abstract String contentType();
574574

575-
public Object getDerivedSource(LeafReader leafReader, int docId) throws IOException {
575+
/**
576+
* Method used for deriving source and building it to XContentBuilder object
577+
* @param builder - builder to store the derived source filed
578+
* @param leafReader - leafReader to read data from
579+
* @param docId - docId for which we want to derive the source
580+
* @throws IOException
581+
*/
582+
public void buildDerivedSource(XContentBuilder builder, LeafReader leafReader, int docId) throws IOException {
576583
if (mappedFieldType.isDerivedSourceSupported() == false) throw new UnsupportedOperationException(
577584
"Derived source field is not supported for [" + name() + "] field"
578585
);
579-
return deriveSource(leafReader, docId);
586+
deriveSource(builder, leafReader, docId);
580587
}
581588

582589
// generic implementation, override in subclasses for specific implementation
583-
protected Object deriveSource(LeafReader leafReader, int docId) throws IOException {
584-
return null;
590+
protected void deriveSource(XContentBuilder builder, LeafReader leafReader, int docId) throws IOException {
591+
throw new UnsupportedOperationException("Derived source field is not supported for [" + name() + "] field");
585592
}
586593

587594
/**

0 commit comments

Comments
 (0)