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:
parent
62ef6440b2
commit
86a88d735f
|
@ -0,0 +1,5 @@
|
|||
pr: 112850
|
||||
summary: Fix synthetic source field names for multi-fields
|
||||
area: Mapping
|
||||
type: bug
|
||||
issues: []
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue