Skip to content

Commit 1d875cf

Browse files
weizijundavidkyle
authored andcommitted
[ML] Fix text structure NPE when fields in list have null value (elastic#125922)
1 parent 4c86ee4 commit 1d875cf

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

docs/changelog/125922.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 125922
2+
summary: Fix text structure NPE when fields in list have null value
3+
area: Machine Learning
4+
type: bug
5+
issues: []

x-pack/plugin/text-structure/src/main/java/org/elasticsearch/xpack/textstructure/structurefinder/TextStructureUtils.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.LinkedHashMap;
2424
import java.util.List;
2525
import java.util.Map;
26+
import java.util.Objects;
2627
import java.util.Set;
2728
import java.util.SortedMap;
2829
import java.util.TreeMap;
@@ -329,7 +330,7 @@ static Tuple<SortedMap<String, Object>, SortedMap<String, FieldStats>> guessMapp
329330

330331
List<Object> fieldValues = sampleRecords.stream()
331332
.map(record -> record.get(fieldName))
332-
.filter(fieldValue -> fieldValue != null)
333+
.filter(Objects::nonNull)
333334
.collect(Collectors.toList());
334335

335336
Tuple<Map<String, String>, FieldStats> mappingAndFieldStats = guessMappingAndCalculateFieldStats(
@@ -425,7 +426,10 @@ static Tuple<Map<String, String>, FieldStats> guessMappingAndCalculateFieldStats
425426
);
426427
}
427428

428-
Collection<String> fieldValuesAsStrings = fieldValues.stream().map(Object::toString).collect(Collectors.toList());
429+
Collection<String> fieldValuesAsStrings = fieldValues.stream()
430+
.filter(Objects::nonNull)
431+
.map(Object::toString)
432+
.collect(Collectors.toList());
429433
Map<String, String> mapping = guessScalarMapping(
430434
explanation,
431435
fieldName,

x-pack/plugin/text-structure/src/test/java/org/elasticsearch/xpack/textstructure/structurefinder/TextStructureUtilsTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,6 +1106,16 @@ public void testGuessGeoShape() {
11061106
}
11071107
}
11081108

1109+
public void testGuessMappingWithNullValue() {
1110+
Map<String, String> expected = Collections.singletonMap(TextStructureUtils.MAPPING_TYPE_SETTING, "keyword");
1111+
1112+
Consumer<Boolean> testGuessMappingGivenEcsCompatibility = (ecsCompatibility) -> {
1113+
assertEquals(expected, guessMapping(explanation, "foo", Arrays.asList("ERROR", null, "DEBUG"), ecsCompatibility));
1114+
};
1115+
1116+
ecsCompatibilityModes.forEach(testGuessMappingGivenEcsCompatibility);
1117+
}
1118+
11091119
private Map<String, String> guessMapping(
11101120
List<String> explanation,
11111121
String fieldName,

0 commit comments

Comments
 (0)