Fix synthetic source field names for multi-fields (#112850)

* Fix synthetic source field names for multi-fields

* enable logsdb in randomized tests

* Revert "enable logsdb in randomized tests"

This reverts commit 2e2c22e2bb.

* Update docs/changelog/112850.yaml

* fix
This commit is contained in:
Kostas Krikellas 2024-09-13 15:00:55 +03:00 committed by GitHub
parent 62ef6440b2
commit 86a88d735f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 22 additions and 11 deletions

View File

@ -0,0 +1,5 @@
pr: 112850
summary: Fix synthetic source field names for multi-fields
area: Mapping
type: bug
issues: []

View File

@ -433,7 +433,7 @@ public class MatchOnlyTextFieldMapper extends FieldMapper {
@Override
protected SyntheticSourceSupport syntheticSourceSupport() {
var loader = new StringStoredFieldFieldLoader(fieldType().storedFieldNameForSyntheticSource(), leafName()) {
var loader = new StringStoredFieldFieldLoader(fieldType().storedFieldNameForSyntheticSource(), fieldType().name(), leafName()) {
@Override
protected void write(XContentBuilder b, Object value) throws IOException {
b.value((String) value);

View File

@ -582,7 +582,7 @@ public class AnnotatedTextFieldMapper extends FieldMapper {
var kwd = TextFieldMapper.SyntheticSourceHelper.getKeywordFieldMapperForSyntheticSource(this);
if (kwd != null) {
return new SyntheticSourceSupport.Native(kwd.syntheticFieldLoader(leafName()));
return new SyntheticSourceSupport.Native(kwd.syntheticFieldLoader(fullPath(), leafName()));
}
return super.syntheticSourceSupport();

View File

@ -1037,13 +1037,13 @@ public final class KeywordFieldMapper extends FieldMapper {
}
if (fieldType.stored() || hasDocValues) {
return new SyntheticSourceSupport.Native(syntheticFieldLoader(leafName()));
return new SyntheticSourceSupport.Native(syntheticFieldLoader(fullPath(), leafName()));
}
return super.syntheticSourceSupport();
}
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader(String simpleName) {
public SourceLoader.SyntheticFieldLoader syntheticFieldLoader(String fullFieldName, String leafFieldName) {
assert fieldType.stored() || hasDocValues;
var layers = new ArrayList<CompositeSyntheticFieldLoader.Layer>();
@ -1081,6 +1081,6 @@ public final class KeywordFieldMapper extends FieldMapper {
});
}
return new CompositeSyntheticFieldLoader(simpleName, fullPath(), layers);
return new CompositeSyntheticFieldLoader(leafFieldName, fullFieldName, layers);
}
}

View File

@ -19,19 +19,25 @@ import java.util.stream.Stream;
import static java.util.Collections.emptyList;
public abstract class StringStoredFieldFieldLoader implements SourceLoader.SyntheticFieldLoader {
private final String name;
private final String storedFieldLoaderName;
private final String fullName;
private final String simpleName;
private List<Object> values = emptyList();
public StringStoredFieldFieldLoader(String name, String simpleName) {
this.name = name;
public StringStoredFieldFieldLoader(String fullName, String simpleName) {
this(fullName, fullName, simpleName);
}
public StringStoredFieldFieldLoader(String storedFieldLoaderName, String fullName, String simpleName) {
this.storedFieldLoaderName = storedFieldLoaderName;
this.fullName = fullName;
this.simpleName = simpleName;
}
@Override
public final Stream<Map.Entry<String, StoredFieldLoader>> storedFieldLoaders() {
return Stream.of(Map.entry(name, newValues -> values = newValues));
return Stream.of(Map.entry(storedFieldLoaderName, newValues -> values = newValues));
}
@Override
@ -72,6 +78,6 @@ public abstract class StringStoredFieldFieldLoader implements SourceLoader.Synth
@Override
public String fieldName() {
return name;
return fullName;
}
}

View File

@ -1462,7 +1462,7 @@ public final class TextFieldMapper extends FieldMapper {
var kwd = SyntheticSourceHelper.getKeywordFieldMapperForSyntheticSource(this);
if (kwd != null) {
return new SyntheticSourceSupport.Native(kwd.syntheticFieldLoader(leafName()));
return new SyntheticSourceSupport.Native(kwd.syntheticFieldLoader(fullPath(), leafName()));
}
return super.syntheticSourceSupport();