From 98ef9efb4d18389d97d468add4225e1de56b850b Mon Sep 17 00:00:00 2001 From: Shreyansh Ray Date: Fri, 3 Jan 2025 14:53:07 +0530 Subject: [PATCH] Add support for date fields --- .../opensearch/index/get/ShardGetService.java | 16 ++++++++++++++++ .../org/opensearch/search/fetch/FetchPhase.java | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/server/src/main/java/org/opensearch/index/get/ShardGetService.java b/server/src/main/java/org/opensearch/index/get/ShardGetService.java index 9fef3c8362fed..026f9d18fc346 100644 --- a/server/src/main/java/org/opensearch/index/get/ShardGetService.java +++ b/server/src/main/java/org/opensearch/index/get/ShardGetService.java @@ -54,6 +54,7 @@ import org.opensearch.common.lucene.uid.VersionsAndSeqNoResolver.DocIdAndVersion; import org.opensearch.common.metrics.CounterMetric; import org.opensearch.common.metrics.MeanMetric; +import org.opensearch.common.time.DateFormatter; import org.opensearch.common.util.set.Sets; import org.opensearch.common.xcontent.XContentFactory; import org.opensearch.common.xcontent.XContentHelper; @@ -70,6 +71,7 @@ import org.opensearch.index.fielddata.SortedNumericDoubleValues; import org.opensearch.index.fieldvisitor.CustomFieldsVisitor; import org.opensearch.index.fieldvisitor.FieldsVisitor; +import org.opensearch.index.mapper.DateFieldMapper; import org.opensearch.index.mapper.DocumentMapper; import org.opensearch.index.mapper.FieldMapper; import org.opensearch.index.mapper.IdFieldMapper; @@ -566,6 +568,20 @@ private static Map buildUsingDocValues(int docId, LeafReader rea } } } + } else if (fieldMapper instanceof DateFieldMapper) { + DateFormatter dateFormatter = ((DateFieldMapper) fieldMapper).fieldType().dateTimeFormatter(); + if (sndv.advanceExact(docId)) { + int size = sndv.docValueCount(); + String[] vals = new String[size]; + for (int i = 0; i < size; i++) { + vals[i] = dateFormatter.formatMillis(sndv.nextValue()); + } + if (size > 1) { + docValues.put(fieldName, vals); + } else { + docValues.put(fieldName, vals[0]); + } + } } break; } diff --git a/server/src/main/java/org/opensearch/search/fetch/FetchPhase.java b/server/src/main/java/org/opensearch/search/fetch/FetchPhase.java index 86a34e420cda8..fa9c3463f59d6 100644 --- a/server/src/main/java/org/opensearch/search/fetch/FetchPhase.java +++ b/server/src/main/java/org/opensearch/search/fetch/FetchPhase.java @@ -54,6 +54,7 @@ import org.opensearch.common.document.DocumentField; import org.opensearch.common.lucene.index.SequentialStoredFieldsLeafReader; import org.opensearch.common.lucene.search.Queries; +import org.opensearch.common.time.DateFormatter; import org.opensearch.common.xcontent.XContentFactory; import org.opensearch.common.xcontent.XContentHelper; import org.opensearch.common.xcontent.XContentType; @@ -68,6 +69,7 @@ import org.opensearch.index.fielddata.SortedNumericDoubleValues; import org.opensearch.index.fieldvisitor.CustomFieldsVisitor; import org.opensearch.index.fieldvisitor.FieldsVisitor; +import org.opensearch.index.mapper.DateFieldMapper; import org.opensearch.index.mapper.DocumentMapper; import org.opensearch.index.mapper.FieldMapper; import org.opensearch.index.mapper.MappedFieldType; @@ -488,6 +490,20 @@ private static Map buildUsingDocValues(int docId, LeafReader rea } } } + } else if (fieldMapper instanceof DateFieldMapper) { + DateFormatter dateFormatter = ((DateFieldMapper) fieldMapper).fieldType().dateTimeFormatter(); + if (sndv.advanceExact(docId)) { + int size = sndv.docValueCount(); + String[] vals = new String[size]; + for (int i = 0; i < size; i++) { + vals[i] = dateFormatter.formatMillis(sndv.nextValue()); + } + if (size > 1) { + docValues.put(fieldName, vals); + } else { + docValues.put(fieldName, vals[0]); + } + } } break; }