Skip to content

Commit

Permalink
Fix synthetic source field names for multi-fields (elastic#112850)
Browse files Browse the repository at this point in the history
* Fix synthetic source field names for multi-fields

* enable logsdb in randomized tests

* Revert "enable logsdb in randomized tests"

This reverts commit 2e2c22e.

* Update docs/changelog/112850.yaml

* fix
  • Loading branch information
kkrik-es authored Sep 13, 2024
1 parent 62ef644 commit 86a88d7
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 11 deletions.
5 changes: 5 additions & 0 deletions docs/changelog/112850.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pr: 112850
summary: Fix synthetic source field names for multi-fields
area: Mapping
type: bug
issues: []
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ public MatchOnlyTextFieldType fieldType() {

@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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,7 @@ protected void write(XContentBuilder b, Object value) throws IOException {

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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1037,13 +1037,13 @@ protected SyntheticSourceSupport syntheticSourceSupport() {
}

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>();
Expand Down Expand Up @@ -1081,6 +1081,6 @@ protected void writeValue(Object value, XContentBuilder b) throws IOException {
});
}

return new CompositeSyntheticFieldLoader(simpleName, fullPath(), layers);
return new CompositeSyntheticFieldLoader(leafFieldName, fullFieldName, layers);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,25 @@
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
Expand Down Expand Up @@ -72,6 +78,6 @@ public final DocValuesLoader docValuesLoader(LeafReader reader, int[] docIdsInLe

@Override
public String fieldName() {
return name;
return fullName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1462,7 +1462,7 @@ protected void write(XContentBuilder b, Object value) throws IOException {

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();
Expand Down

0 comments on commit 86a88d7

Please sign in to comment.