Skip to content

Commit c589135

Browse files
authored
Always Emit Inference ID in Semantic Text Mapping (#117294) (#117344)
1 parent 193417f commit c589135

File tree

5 files changed

+51
-4
lines changed

5 files changed

+51
-4
lines changed

docs/changelog/117294.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 117294
2+
summary: Always Emit Inference ID in Semantic Text Mapping
3+
area: Mapping
4+
type: bug
5+
issues: []

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferenceFeatures.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public Set<NodeFeature> getTestFeatures() {
3737
SemanticTextFieldMapper.SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX,
3838
SemanticTextFieldMapper.SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX,
3939
SemanticTextFieldMapper.SEMANTIC_TEXT_DELETE_FIX,
40-
SemanticTextFieldMapper.SEMANTIC_TEXT_ZERO_SIZE_FIX
40+
SemanticTextFieldMapper.SEMANTIC_TEXT_ZERO_SIZE_FIX,
41+
SemanticTextFieldMapper.SEMANTIC_TEXT_ALWAYS_EMIT_INFERENCE_ID_FIX
4142
);
4243
}
4344
}

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapper.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFie
9393
public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix");
9494
public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix");
9595
public static final NodeFeature SEMANTIC_TEXT_ZERO_SIZE_FIX = new NodeFeature("semantic_text.zero_size_fix");
96+
public static final NodeFeature SEMANTIC_TEXT_ALWAYS_EMIT_INFERENCE_ID_FIX = new NodeFeature(
97+
"semantic_text.always_emit_inference_id_fix"
98+
);
9699

97100
public static final String CONTENT_TYPE = "semantic_text";
98101
public static final String DEFAULT_ELSER_2_INFERENCE_ID = DEFAULT_ELSER_ID;
@@ -119,7 +122,7 @@ public static class Builder extends FieldMapper.Builder {
119122
"[" + INFERENCE_ID_FIELD + "] on mapper [" + leafName() + "] of type [" + CONTENT_TYPE + "] must not be empty"
120123
);
121124
}
122-
});
125+
}).alwaysSerialize();
123126

124127
private final Parameter<String> searchInferenceId = Parameter.stringParam(
125128
SEARCH_INFERENCE_ID_FIELD,

x-pack/plugin/inference/src/test/java/org/elasticsearch/xpack/inference/mapper/SemanticTextFieldMapperTests.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ protected String minimalIsInvalidRoutingPathErrorMessage(Mapper mapper) {
109109
return "cannot have nested fields when index is in [index.mode=time_series]";
110110
}
111111

112+
@Override
113+
protected void metaMapping(XContentBuilder b) throws IOException {
114+
super.metaMapping(b);
115+
b.field(INFERENCE_ID_FIELD, DEFAULT_ELSER_2_INFERENCE_ID);
116+
}
117+
112118
@Override
113119
protected Object getSampleValueForDocument() {
114120
return null;
@@ -166,10 +172,11 @@ protected void assertSearchable(MappedFieldType fieldType) {
166172
public void testDefaults() throws Exception {
167173
final String fieldName = "field";
168174
final XContentBuilder fieldMapping = fieldMapping(this::minimalMapping);
175+
final XContentBuilder expectedMapping = fieldMapping(this::metaMapping);
169176

170177
MapperService mapperService = createMapperService(fieldMapping);
171178
DocumentMapper mapper = mapperService.documentMapper();
172-
assertEquals(Strings.toString(fieldMapping), mapper.mappingSource().toString());
179+
assertEquals(Strings.toString(expectedMapping), mapper.mappingSource().toString());
173180
assertSemanticTextField(mapperService, fieldName, false);
174181
assertInferenceEndpoints(mapperService, fieldName, DEFAULT_ELSER_2_INFERENCE_ID, DEFAULT_ELSER_2_INFERENCE_ID);
175182

@@ -208,10 +215,15 @@ public void testSetInferenceEndpoints() throws IOException {
208215
final XContentBuilder fieldMapping = fieldMapping(
209216
b -> b.field("type", "semantic_text").field(SEARCH_INFERENCE_ID_FIELD, searchInferenceId)
210217
);
218+
final XContentBuilder expectedMapping = fieldMapping(
219+
b -> b.field("type", "semantic_text")
220+
.field(INFERENCE_ID_FIELD, DEFAULT_ELSER_2_INFERENCE_ID)
221+
.field(SEARCH_INFERENCE_ID_FIELD, searchInferenceId)
222+
);
211223
final MapperService mapperService = createMapperService(fieldMapping);
212224
assertSemanticTextField(mapperService, fieldName, false);
213225
assertInferenceEndpoints(mapperService, fieldName, DEFAULT_ELSER_2_INFERENCE_ID, searchInferenceId);
214-
assertSerialization.accept(fieldMapping, mapperService);
226+
assertSerialization.accept(expectedMapping, mapperService);
215227
}
216228
{
217229
final XContentBuilder fieldMapping = fieldMapping(

x-pack/plugin/inference/src/yamlRestTest/resources/rest-api-spec/test/inference/10_semantic_text_field_mapping.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,3 +371,29 @@ setup:
371371
- match: { error.type: illegal_argument_exception }
372372
- match: { error.reason: "semantic_text field [level_1.level_2.sparse_field] cannot be in an object field with
373373
subobjects disabled" }
374+
375+
---
376+
"Mapping always includes inference ID":
377+
- requires:
378+
cluster_features: "semantic_text.always_emit_inference_id_fix"
379+
reason: always emit inference ID fix added in 8.17.0
380+
test_runner_features: [capabilities]
381+
capabilities:
382+
- method: GET
383+
path: /_inference
384+
capabilities: [default_elser_2]
385+
386+
- do:
387+
indices.create:
388+
index: test-always-include-inference-id-index
389+
body:
390+
mappings:
391+
properties:
392+
semantic_field:
393+
type: semantic_text
394+
395+
- do:
396+
indices.get_mapping:
397+
index: test-always-include-inference-id-index
398+
399+
- exists: test-always-include-inference-id-index.mappings.properties.semantic_field.inference_id

0 commit comments

Comments
 (0)