Skip to content

Commit 33d2e3a

Browse files
committed
Fix class cast issue in bwc
1 parent bc515c4 commit 33d2e3a

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/MatchOnlyTextFieldMapper.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ public Query phrasePrefixQuery(TokenStream stream, int slop, int maxExpansions,
365365
@Override
366366
public BlockLoader blockLoader(BlockLoaderContext blContext) {
367367
if (textFieldType.isSyntheticSource()) {
368-
return new BlockStoredFieldsReader.BytesFromBytesRefsBlockLoader(storedFieldNameForSyntheticSource());
368+
return new BlockStoredFieldsReader.BytesFromMixedStringsBytesRefBlockLoader(storedFieldNameForSyntheticSource());
369369
}
370370
SourceValueFetcher fetcher = SourceValueFetcher.toString(blContext.sourcePaths(name()));
371371
// MatchOnlyText never has norms, so we have to use the field names field
@@ -386,7 +386,12 @@ public IndexFieldData.Builder fielddataBuilder(FieldDataContext fieldDataContext
386386
) {
387387
@Override
388388
protected BytesRef storedToBytesRef(Object stored) {
389-
return (BytesRef) stored;
389+
if (stored instanceof BytesRef) {
390+
return (BytesRef) stored;
391+
} else {
392+
assert stored instanceof String;
393+
return new BytesRef((String) stored);
394+
}
390395
}
391396
};
392397
}
@@ -477,7 +482,12 @@ protected SyntheticSourceSupport syntheticSourceSupport() {
477482
() -> new StringStoredFieldFieldLoader(fieldType().storedFieldNameForSyntheticSource(), fieldType().name(), leafName()) {
478483
@Override
479484
protected void write(XContentBuilder b, Object value) throws IOException {
480-
b.value(((BytesRef) value).utf8ToString());
485+
if (value instanceof BytesRef) {
486+
b.value(((BytesRef) value).utf8ToString());
487+
} else {
488+
assert value instanceof String;
489+
b.value((String) value);
490+
}
481491
}
482492
}
483493
);

server/src/main/java/org/elasticsearch/index/mapper/BlockStoredFieldsReader.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,34 @@ public final SortedSetDocValues ordinals(LeafReaderContext context) {
6363
}
6464
}
6565

66+
public static class BytesFromMixedStringsBytesRefBlockLoader extends StoredFieldsBlockLoader {
67+
public BytesFromMixedStringsBytesRefBlockLoader(String field) {
68+
super(field);
69+
}
70+
71+
@Override
72+
public Builder builder(BlockFactory factory, int expectedCount) {
73+
return factory.bytesRefs(expectedCount);
74+
}
75+
76+
@Override
77+
public RowStrideReader rowStrideReader(LeafReaderContext context) throws IOException {
78+
return new Bytes(field) {
79+
private final BytesRef scratch = new BytesRef();
80+
81+
@Override
82+
protected BytesRef toBytesRef(Object v) {
83+
if (v instanceof BytesRef) {
84+
return (BytesRef) v;
85+
} else {
86+
assert v instanceof String;
87+
return BlockSourceReader.toBytesRef(scratch, (String) v);
88+
}
89+
}
90+
};
91+
}
92+
}
93+
6694
/**
6795
* Load {@link BytesRef} blocks from stored {@link BytesRef}s.
6896
*/

0 commit comments

Comments
 (0)