Skip to content

Commit cf7f9eb

Browse files
authored
[7.7] Do not fail Evaluate API when the actual and predicted fields' types differ (#54255) (#54320)
1 parent 16692e1 commit cf7f9eb

File tree

3 files changed

+311
-188
lines changed

3 files changed

+311
-188
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/dataframe/evaluation/classification/MulticlassConfusionMatrix.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public final Tuple<List<AggregationBuilder>, List<PipelineAggregationBuilder>> a
143143
if (result.get() == null) { // These are steps 2, 3, 4 etc.
144144
KeyedFilter[] keyedFiltersPredicted =
145145
topActualClassNames.get().stream()
146-
.map(className -> new KeyedFilter(className, QueryBuilders.termQuery(predictedField, className)))
146+
.map(className -> new KeyedFilter(className, QueryBuilders.matchQuery(predictedField, className).lenient(true)))
147147
.toArray(KeyedFilter[]::new);
148148
// Knowing exactly how many buckets does each aggregation use, we can choose the size of the batch so that
149149
// too_many_buckets_exception exception is not thrown.
@@ -154,7 +154,7 @@ public final Tuple<List<AggregationBuilder>, List<PipelineAggregationBuilder>> a
154154
topActualClassNames.get().stream()
155155
.skip(actualClasses.size())
156156
.limit(actualClassesPerBatch)
157-
.map(className -> new KeyedFilter(className, QueryBuilders.termQuery(actualField, className)))
157+
.map(className -> new KeyedFilter(className, QueryBuilders.matchQuery(actualField, className).lenient(true)))
158158
.toArray(KeyedFilter[]::new);
159159
if (keyedFiltersActual.length > 0) {
160160
return Tuple.tuple(

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/dataframe/evaluation/classification/Precision.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public final Tuple<List<AggregationBuilder>, List<PipelineAggregationBuilder>> a
108108
if (result.get() == null) { // This is step 2
109109
KeyedFilter[] keyedFiltersPredicted =
110110
topActualClassNames.get().stream()
111-
.map(className -> new KeyedFilter(className, QueryBuilders.termQuery(predictedField, className)))
111+
.map(className -> new KeyedFilter(className, QueryBuilders.matchQuery(predictedField, className).lenient(true)))
112112
.toArray(KeyedFilter[]::new);
113113
Script script = PainlessScripts.buildIsEqualScript(actualField, predictedField);
114114
return Tuple.tuple(

0 commit comments

Comments
 (0)