diff --git a/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateIndexNameProcessor.java b/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateIndexNameProcessor.java index e25891aca4e..311f30513c1 100644 --- a/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateIndexNameProcessor.java +++ b/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateIndexNameProcessor.java @@ -63,7 +63,12 @@ public final class DateIndexNameProcessor extends AbstractProcessor { @Override public void execute(IngestDocument ingestDocument) throws Exception { // Date can be specified as a string or long: - String date = Objects.toString(ingestDocument.getFieldValue(field, Object.class)); + Object obj = ingestDocument.getFieldValue(field, Object.class); + String date = null; + if (obj != null) { + // Not use Objects.toString(...) here, because null gets changed to "null" which may confuse some date parsers + date = obj.toString(); + } DateTime dateTime = null; Exception lastException = null; diff --git a/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateProcessor.java b/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateProcessor.java index 4dec8f53d3f..100dc3ad031 100644 --- a/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateProcessor.java +++ b/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateProcessor.java @@ -30,10 +30,10 @@ import org.joda.time.DateTimeZone; import org.joda.time.format.ISODateTimeFormat; import java.util.ArrayList; -import java.util.IllformedLocaleException; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.function.Function; public final class DateProcessor extends AbstractProcessor { @@ -64,7 +64,12 @@ public final class DateProcessor extends AbstractProcessor { @Override public void execute(IngestDocument ingestDocument) { - String value = ingestDocument.getFieldValue(field, String.class); + Object obj = ingestDocument.getFieldValue(field, Object.class); + String value = null; + if (obj != null) { + // Not use Objects.toString(...) here, because null gets changed to "null" which may confuse some date parsers + value = obj.toString(); + } DateTime dateTime = null; Exception lastException = null; diff --git a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/DateProcessorTests.java b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/DateProcessorTests.java index d92f2e84be1..cc68340ec59 100644 --- a/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/DateProcessorTests.java +++ b/modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/DateProcessorTests.java @@ -134,6 +134,12 @@ public class DateProcessorTests extends ESTestCase { IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random(), document); dateProcessor.execute(ingestDocument); assertThat(ingestDocument.getFieldValue("date_as_date", String.class), equalTo("1970-01-01T00:16:40.500Z")); + + document = new HashMap<>(); + document.put("date_as_string", 1000500L); + ingestDocument = RandomDocumentPicks.randomIngestDocument(random(), document); + dateProcessor.execute(ingestDocument); + assertThat(ingestDocument.getFieldValue("date_as_date", String.class), equalTo("1970-01-01T00:16:40.500Z")); } public void testUnix() {