diff --git a/modules/lang-painless/src/test/java/org/opensearch/painless/DerivedFieldScriptTests.java b/modules/lang-painless/src/test/java/org/opensearch/painless/DerivedFieldScriptTests.java index 2340e5b238ebb..b427f2ab55a48 100644 --- a/modules/lang-painless/src/test/java/org/opensearch/painless/DerivedFieldScriptTests.java +++ b/modules/lang-painless/src/test/java/org/opensearch/painless/DerivedFieldScriptTests.java @@ -82,6 +82,26 @@ private DerivedFieldScript.LeafFactory compile(String expression, SearchLookup l return factory.newFactory(Collections.emptyMap(), lookup); } + public void testEmittingFloatField() throws IOException { + SearchLookup lookup = mock(SearchLookup.class); + + // Mock LeafReaderContext + MemoryIndex index = new MemoryIndex(); + LeafReaderContext leafReaderContext = index.createSearcher().getIndexReader().leaves().get(0); + + LeafSearchLookup leafSearchLookup = mock(LeafSearchLookup.class); + when(lookup.getLeafSearchLookup(leafReaderContext)).thenReturn(leafSearchLookup); + + // Script that emits a float value + DerivedFieldScript script = compile("emit(3.14f)", lookup).newInstance(leafReaderContext); + script.setDocument(1); + script.execute(); + + List result = script.getEmittedValues(); + assertEquals(1, result.size()); + assertEquals(3.14f, result.get(0)); + } + public void testEmittingDoubleField() throws IOException { // Mocking field value to be returned NumberFieldType fieldType = new NumberFieldType("test_double_field", NumberType.DOUBLE); diff --git a/server/src/main/java/org/opensearch/script/DerivedFieldScript.java b/server/src/main/java/org/opensearch/script/DerivedFieldScript.java index 5329e8e6a1f30..e4ea1e06e5ddc 100644 --- a/server/src/main/java/org/opensearch/script/DerivedFieldScript.java +++ b/server/src/main/java/org/opensearch/script/DerivedFieldScript.java @@ -119,6 +119,8 @@ private int getObjectByteSize(Object obj) { return Long.BYTES; } else if (obj instanceof Double) { return Double.BYTES; + } else if (obj instanceof Float) { + return Float.BYTES; } else if (obj instanceof Boolean) { return Byte.BYTES; // Assuming 1 byte for boolean } else if (obj instanceof Tuple) {