From 42c906591dadae128ca2cc45e3f76401a2a61ea7 Mon Sep 17 00:00:00 2001 From: Kostas Krikellas <131142368+kkrik-es@users.noreply.github.com> Date: Mon, 27 Jan 2025 17:12:42 +0200 Subject: [PATCH] Lazy initialization for `SyntheticSourceSupport.loader()` (#120896) * Lazy initialization for `SyntheticSourceSupport.loader()` * [CI] Auto commit changes from spotless * add missing --------- Co-authored-by: elasticsearchmachine --- .../extras/MatchOnlyTextFieldMapper.java | 14 ++++---- .../mapper/extras/ScaledFloatFieldMapper.java | 14 ++++---- .../AnnotatedTextFieldMapper.java | 8 ++--- .../index/mapper/BinaryFieldMapper.java | 6 ++-- .../index/mapper/BooleanFieldMapper.java | 14 ++++---- .../index/mapper/DateFieldMapper.java | 14 ++++---- .../index/mapper/DocCountFieldMapper.java | 2 +- .../index/mapper/DocumentParser.java | 2 +- .../index/mapper/FieldMapper.java | 18 +++++++++- .../index/mapper/GeoPointFieldMapper.java | 20 +++++------ .../mapper/IgnoredSourceFieldMapper.java | 2 +- .../index/mapper/IpFieldMapper.java | 35 ++++++++++--------- .../index/mapper/KeywordFieldMapper.java | 2 +- .../index/mapper/MetadataFieldMapper.java | 2 +- .../index/mapper/NumberFieldMapper.java | 2 +- .../index/mapper/RangeFieldMapper.java | 6 ++-- .../index/mapper/TextFieldMapper.java | 8 ++--- .../flattened/FlattenedFieldMapper.java | 14 ++++---- .../vectors/DenseVectorFieldMapper.java | 10 +++--- .../vectors/SparseVectorFieldMapper.java | 2 +- .../index/mapper/DocumentParserTests.java | 6 ++-- .../mapper/HistogramFieldMapper.java | 14 ++++---- .../AggregateDoubleMetricFieldMapper.java | 14 ++++---- .../mapper/ConstantKeywordFieldMapper.java | 8 ++--- .../CountedKeywordFieldMapper.java | 5 +-- .../unsignedlong/UnsignedLongFieldMapper.java | 14 ++++---- .../VersionStringFieldMapper.java | 26 +++++++------- .../mapper/RankVectorsFieldMapper.java | 2 +- .../wildcard/mapper/WildcardFieldMapper.java | 28 +++++++-------- 29 files changed, 159 insertions(+), 153 deletions(-) diff --git a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/MatchOnlyTextFieldMapper.java b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/MatchOnlyTextFieldMapper.java index 5904169308fab..b103a23772a47 100644 --- a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/MatchOnlyTextFieldMapper.java +++ b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/MatchOnlyTextFieldMapper.java @@ -463,13 +463,13 @@ public MatchOnlyTextFieldType fieldType() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { - var loader = new StringStoredFieldFieldLoader(fieldType().storedFieldNameForSyntheticSource(), fieldType().name(), leafName()) { - @Override - protected void write(XContentBuilder b, Object value) throws IOException { - b.value((String) value); + return new SyntheticSourceSupport.Native( + () -> new StringStoredFieldFieldLoader(fieldType().storedFieldNameForSyntheticSource(), fieldType().name(), leafName()) { + @Override + protected void write(XContentBuilder b, Object value) throws IOException { + b.value((String) value); + } } - }; - - return new SyntheticSourceSupport.Native(loader); + ); } } diff --git a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/ScaledFloatFieldMapper.java b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/ScaledFloatFieldMapper.java index b845545133e19..a91ca66faa405 100644 --- a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/ScaledFloatFieldMapper.java +++ b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/ScaledFloatFieldMapper.java @@ -707,14 +707,14 @@ public int docValueCount() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (hasDocValues) { - var loader = new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), ignoreMalformed.value()) { - @Override - protected void writeValue(XContentBuilder b, long value) throws IOException { - b.value(decodeForSyntheticSource(value, scalingFactor)); + return new SyntheticSourceSupport.Native( + () -> new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), ignoreMalformed.value()) { + @Override + protected void writeValue(XContentBuilder b, long value) throws IOException { + b.value(decodeForSyntheticSource(value, scalingFactor)); + } } - }; - - return new SyntheticSourceSupport.Native(loader); + ); } return super.syntheticSourceSupport(); diff --git a/plugins/mapper-annotated-text/src/main/java/org/elasticsearch/index/mapper/annotatedtext/AnnotatedTextFieldMapper.java b/plugins/mapper-annotated-text/src/main/java/org/elasticsearch/index/mapper/annotatedtext/AnnotatedTextFieldMapper.java index f58fd138905c3..d04828b067f0c 100644 --- a/plugins/mapper-annotated-text/src/main/java/org/elasticsearch/index/mapper/annotatedtext/AnnotatedTextFieldMapper.java +++ b/plugins/mapper-annotated-text/src/main/java/org/elasticsearch/index/mapper/annotatedtext/AnnotatedTextFieldMapper.java @@ -563,19 +563,17 @@ public FieldMapper.Builder getMergeBuilder() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (fieldType.stored()) { - var loader = new StringStoredFieldFieldLoader(fullPath(), leafName()) { + return new SyntheticSourceSupport.Native(() -> new StringStoredFieldFieldLoader(fullPath(), leafName()) { @Override protected void write(XContentBuilder b, Object value) throws IOException { b.value((String) value); } - }; - - return new SyntheticSourceSupport.Native(loader); + }); } var kwd = TextFieldMapper.SyntheticSourceHelper.getKeywordFieldMapperForSyntheticSource(this); if (kwd != null) { - return new SyntheticSourceSupport.Native(kwd.syntheticFieldLoader(fullPath(), leafName())); + return new SyntheticSourceSupport.Native(() -> kwd.syntheticFieldLoader(fullPath(), leafName())); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java index 87c123d71aae5..2093909876567 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/BinaryFieldMapper.java @@ -195,7 +195,7 @@ protected String contentType() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (hasDocValues) { - var loader = new BinaryDocValuesSyntheticFieldLoader(fullPath()) { + return new SyntheticSourceSupport.Native(() -> new BinaryDocValuesSyntheticFieldLoader(fullPath()) { @Override protected void writeValue(XContentBuilder b, BytesRef value) throws IOException { var in = new ByteArrayStreamInput(); @@ -221,9 +221,7 @@ protected void writeValue(XContentBuilder b, BytesRef value) throws IOException b.endArray(); } } - }; - - return new SyntheticSourceSupport.Native(loader); + }); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java index 1a28bf2a10acb..fafd041f887d4 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java @@ -552,14 +552,14 @@ protected String contentType() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (hasDocValues) { - var loader = new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), ignoreMalformed.value()) { - @Override - protected void writeValue(XContentBuilder b, long value) throws IOException { - b.value(value == 1); + return new SyntheticSourceSupport.Native( + () -> new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), ignoreMalformed.value()) { + @Override + protected void writeValue(XContentBuilder b, long value) throws IOException { + b.value(value == 1); + } } - }; - - return new SyntheticSourceSupport.Native(loader); + ); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java index 012f08a1db01d..823170fcfc1b2 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/DateFieldMapper.java @@ -1012,14 +1012,14 @@ public Long getNullValue() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (hasDocValues) { - var loader = new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), ignoreMalformed) { - @Override - protected void writeValue(XContentBuilder b, long value) throws IOException { - b.value(fieldType().format(value, fieldType().dateTimeFormatter())); + return new SyntheticSourceSupport.Native( + () -> new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), ignoreMalformed) { + @Override + protected void writeValue(XContentBuilder b, long value) throws IOException { + b.value(fieldType().format(value, fieldType().dateTimeFormatter())); + } } - }; - - return new SyntheticSourceSupport.Native(loader); + ); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java index d57564ca5d696..52828c5e430ba 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java @@ -128,7 +128,7 @@ public static IndexableField field(int count) { @Override protected SyntheticSourceSupport syntheticSourceSupport() { - return new SyntheticSourceSupport.Native(new SyntheticFieldLoader()); + return new SyntheticSourceSupport.Native(SyntheticFieldLoader::new); } /** diff --git a/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java b/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java index e2d0b7efa6be9..6361483870cd7 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/DocumentParser.java @@ -1023,7 +1023,7 @@ protected String contentType() { protected SyntheticSourceSupport syntheticSourceSupport() { // Opt out of fallback synthetic source implementation // since there is custom logic in #parseCreateField(). - return new SyntheticSourceSupport.Native(SourceLoader.SyntheticFieldLoader.NOTHING); + return new SyntheticSourceSupport.Native(() -> SourceLoader.SyntheticFieldLoader.NOTHING); } }; } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java index 32681871b346e..7cf012fd298ff 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java @@ -560,11 +560,27 @@ public SourceLoader.SyntheticFieldLoader loader() { SyntheticSourceSupport FALLBACK = new Fallback(); - record Native(SourceLoader.SyntheticFieldLoader loader) implements SyntheticSourceSupport { + final class Native implements SyntheticSourceSupport { + Supplier loaderSupplier; + private SourceLoader.SyntheticFieldLoader loader; + + @SuppressWarnings("checkstyle:RedundantModifier") + public Native(Supplier loaderSupplier) { + this.loaderSupplier = loaderSupplier; + } + @Override public SyntheticSourceMode mode() { return SyntheticSourceMode.NATIVE; } + + @Override + public SourceLoader.SyntheticFieldLoader loader() { + if (loader == null) { + loader = loaderSupplier.get(); + } + return loader; + } } SyntheticSourceMode mode(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/GeoPointFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/GeoPointFieldMapper.java index c99400c122f42..0d91c7525a9e2 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/GeoPointFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/GeoPointFieldMapper.java @@ -622,17 +622,17 @@ protected void onMalformedValue(DocumentParserContext context, XContentBuilder m @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (fieldType().hasDocValues()) { - var loader = new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), ignoreMalformed()) { - final GeoPoint point = new GeoPoint(); - - @Override - protected void writeValue(XContentBuilder b, long value) throws IOException { - point.reset(GeoEncodingUtils.decodeLatitude((int) (value >>> 32)), GeoEncodingUtils.decodeLongitude((int) value)); - point.toXContent(b, ToXContent.EMPTY_PARAMS); + return new SyntheticSourceSupport.Native( + () -> new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), ignoreMalformed()) { + final GeoPoint point = new GeoPoint(); + + @Override + protected void writeValue(XContentBuilder b, long value) throws IOException { + point.reset(GeoEncodingUtils.decodeLatitude((int) (value >>> 32)), GeoEncodingUtils.decodeLongitude((int) value)); + point.toXContent(b, ToXContent.EMPTY_PARAMS); + } } - }; - - return new SyntheticSourceSupport.Native(loader); + ); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/IgnoredSourceFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/IgnoredSourceFieldMapper.java index 9e08298fecdfd..d0f8a0facb06c 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/IgnoredSourceFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/IgnoredSourceFieldMapper.java @@ -231,7 +231,7 @@ protected SyntheticSourceSupport syntheticSourceSupport() { // not being available. // We would like to have an option to lose some values in synthetic source // but have search not fail. - return new SyntheticSourceSupport.Native(new SourceLoader.SyntheticFieldLoader() { + return new SyntheticSourceSupport.Native(() -> new SourceLoader.SyntheticFieldLoader() { @Override public Stream> storedFieldLoaders() { if (indexSettings.getSkipIgnoredSourceRead()) { diff --git a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java index 2f64955b48627..7e2380a357ec5 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java @@ -610,26 +610,27 @@ public void doValidate(MappingLookup lookup) { @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (hasDocValues) { - var layers = new ArrayList(); - layers.add(new SortedSetDocValuesSyntheticFieldLoaderLayer(fullPath()) { - @Override - protected BytesRef convert(BytesRef value) { - byte[] bytes = Arrays.copyOfRange(value.bytes, value.offset, value.offset + value.length); - return new BytesRef(NetworkAddress.format(InetAddressPoint.decode(bytes))); - } + return new SyntheticSourceSupport.Native(() -> { + var layers = new ArrayList(); + layers.add(new SortedSetDocValuesSyntheticFieldLoaderLayer(fullPath()) { + @Override + protected BytesRef convert(BytesRef value) { + byte[] bytes = Arrays.copyOfRange(value.bytes, value.offset, value.offset + value.length); + return new BytesRef(NetworkAddress.format(InetAddressPoint.decode(bytes))); + } - @Override - protected BytesRef preserve(BytesRef value) { - // No need to copy because convert has made a deep copy - return value; + @Override + protected BytesRef preserve(BytesRef value) { + // No need to copy because convert has made a deep copy + return value; + } + }); + + if (ignoreMalformed) { + layers.add(new CompositeSyntheticFieldLoader.MalformedValuesLayer(fullPath())); } + return new CompositeSyntheticFieldLoader(leafName(), fullPath(), layers); }); - - if (ignoreMalformed) { - layers.add(new CompositeSyntheticFieldLoader.MalformedValuesLayer(fullPath())); - } - - return new SyntheticSourceSupport.Native(new CompositeSyntheticFieldLoader(leafName(), fullPath(), layers)); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java index ea461855738fa..8104ed806410a 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java @@ -1052,7 +1052,7 @@ protected SyntheticSourceSupport syntheticSourceSupport() { } if (fieldType.stored() || hasDocValues) { - return new SyntheticSourceSupport.Native(syntheticFieldLoader(fullPath(), leafName())); + return new SyntheticSourceSupport.Native(() -> syntheticFieldLoader(fullPath(), leafName())); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/MetadataFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/MetadataFieldMapper.java index 9a2c9517dfd05..a4a9f3a9069d5 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/MetadataFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/MetadataFieldMapper.java @@ -218,6 +218,6 @@ public void postParse(DocumentParserContext context) throws IOException { @Override protected SyntheticSourceSupport syntheticSourceSupport() { - return new SyntheticSourceSupport.Native(SourceLoader.SyntheticFieldLoader.NOTHING); + return new SyntheticSourceSupport.Native(() -> SourceLoader.SyntheticFieldLoader.NOTHING); } } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java index 963646495f8d1..6b4e87a70ab9e 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java @@ -2039,7 +2039,7 @@ public void doValidate(MappingLookup lookup) { @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (hasDocValues) { - return new SyntheticSourceSupport.Native(type.syntheticFieldLoader(fullPath(), leafName(), ignoreMalformed.value())); + return new SyntheticSourceSupport.Native(() -> type.syntheticFieldLoader(fullPath(), leafName(), ignoreMalformed.value())); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java index 36f61311ddfc7..e70f902657cd1 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/RangeFieldMapper.java @@ -467,7 +467,7 @@ private static Range parseIpRangeFromCidr(final XContentParser parser) throws IO @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (hasDocValues) { - var loader = new BinaryDocValuesSyntheticFieldLoader(fullPath()) { + return new SyntheticSourceSupport.Native(() -> new BinaryDocValuesSyntheticFieldLoader(fullPath()) { @Override protected void writeValue(XContentBuilder b, BytesRef value) throws IOException { List ranges = type.decodeRanges(value); @@ -487,9 +487,7 @@ protected void writeValue(XContentBuilder b, BytesRef value) throws IOException b.endArray(); } } - }; - - return new SyntheticSourceSupport.Native(loader); + }); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/TextFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/TextFieldMapper.java index d9dcfb6aeddfa..5242b33666b21 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/TextFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/TextFieldMapper.java @@ -1481,19 +1481,17 @@ protected void doXContentBody(XContentBuilder builder, Params params) throws IOE @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (store) { - var loader = new StringStoredFieldFieldLoader(fullPath(), leafName()) { + return new SyntheticSourceSupport.Native(() -> new StringStoredFieldFieldLoader(fullPath(), leafName()) { @Override protected void write(XContentBuilder b, Object value) throws IOException { b.value((String) value); } - }; - - return new SyntheticSourceSupport.Native(loader); + }); } var kwd = SyntheticSourceHelper.getKeywordFieldMapperForSyntheticSource(this); if (kwd != null) { - return new SyntheticSourceSupport.Native(kwd.syntheticFieldLoader(fullPath(), leafName())); + return new SyntheticSourceSupport.Native(() -> kwd.syntheticFieldLoader(fullPath(), leafName())); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapper.java index 0aca39f7573f7..d13daa1f416ab 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapper.java @@ -914,14 +914,14 @@ public FieldMapper.Builder getMergeBuilder() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (fieldType().hasDocValues()) { - var loader = new FlattenedSortedSetDocValuesSyntheticFieldLoader( - fullPath(), - fullPath() + KEYED_FIELD_SUFFIX, - ignoreAbove() < Integer.MAX_VALUE ? fullPath() + KEYED_IGNORED_VALUES_FIELD_SUFFIX : null, - leafName() + return new SyntheticSourceSupport.Native( + () -> new FlattenedSortedSetDocValuesSyntheticFieldLoader( + fullPath(), + fullPath() + KEYED_FIELD_SUFFIX, + ignoreAbove() < Integer.MAX_VALUE ? fullPath() + KEYED_IGNORED_VALUES_FIELD_SUFFIX : null, + leafName() + ) ); - - return new SyntheticSourceSupport.Native(loader); } return super.syntheticSourceSupport(); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java index 70e458456cde0..6d01ea21a6478 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldMapper.java @@ -2375,11 +2375,11 @@ public String toString() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { - var loader = fieldType().indexed - ? new IndexedSyntheticFieldLoader(indexCreatedVersion, fieldType().similarity) - : new DocValuesSyntheticFieldLoader(indexCreatedVersion); - - return new SyntheticSourceSupport.Native(loader); + return new SyntheticSourceSupport.Native( + () -> fieldType().indexed + ? new IndexedSyntheticFieldLoader(indexCreatedVersion, fieldType().similarity) + : new DocValuesSyntheticFieldLoader(indexCreatedVersion) + ); } private class IndexedSyntheticFieldLoader extends SourceLoader.DocValuesBasedSyntheticFieldLoader { diff --git a/server/src/main/java/org/elasticsearch/index/mapper/vectors/SparseVectorFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/vectors/SparseVectorFieldMapper.java index 266fee7b3fc70..ca2312c8c708a 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/vectors/SparseVectorFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/vectors/SparseVectorFieldMapper.java @@ -164,7 +164,7 @@ private SparseVectorFieldMapper(String simpleName, MappedFieldType mappedFieldTy @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (fieldType().isStored()) { - return new SyntheticSourceSupport.Native(new SparseVectorSyntheticFieldLoader(fullPath(), leafName())); + return new SyntheticSourceSupport.Native(() -> new SparseVectorSyntheticFieldLoader(fullPath(), leafName())); } return super.syntheticSourceSupport(); } diff --git a/server/src/test/java/org/elasticsearch/index/mapper/DocumentParserTests.java b/server/src/test/java/org/elasticsearch/index/mapper/DocumentParserTests.java index 5b32350cbf4b8..c394d1a82e28e 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/DocumentParserTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/DocumentParserTests.java @@ -3303,15 +3303,13 @@ protected String contentType() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { - var loader = new StringStoredFieldFieldLoader(fullPath(), leafName()) { + return new SyntheticSourceSupport.Native(() -> new StringStoredFieldFieldLoader(fullPath(), leafName()) { @Override protected void write(XContentBuilder b, Object value) throws IOException { BytesRef ref = (BytesRef) value; b.utf8Value(ref.bytes, ref.offset, ref.length); } - }; - - return new SyntheticSourceSupport.Native(loader); + }); } private static final TypeParser PARSER = new FixedTypeParser(c -> new MockMetadataMapper()); diff --git a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/mapper/HistogramFieldMapper.java b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/mapper/HistogramFieldMapper.java index d597d7b59f240..fcf2d572f2d14 100644 --- a/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/mapper/HistogramFieldMapper.java +++ b/x-pack/plugin/analytics/src/main/java/org/elasticsearch/xpack/analytics/mapper/HistogramFieldMapper.java @@ -497,14 +497,14 @@ public long count() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { - var loader = new CompositeSyntheticFieldLoader( - leafName(), - fullPath(), - new HistogramSyntheticFieldLoader(), - new CompositeSyntheticFieldLoader.MalformedValuesLayer(fullPath()) + return new SyntheticSourceSupport.Native( + () -> new CompositeSyntheticFieldLoader( + leafName(), + fullPath(), + new HistogramSyntheticFieldLoader(), + new CompositeSyntheticFieldLoader.MalformedValuesLayer(fullPath()) + ) ); - - return new SyntheticSourceSupport.Native(loader); } private class HistogramSyntheticFieldLoader implements CompositeSyntheticFieldLoader.DocValuesLayer { diff --git a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java index 6944f91042311..df4a0aed01bc2 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java @@ -709,14 +709,14 @@ public FieldMapper.Builder getMergeBuilder() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { - var loader = new CompositeSyntheticFieldLoader( - leafName(), - fullPath(), - new AggregateMetricSyntheticFieldLoader(fullPath(), metrics), - new CompositeSyntheticFieldLoader.MalformedValuesLayer(fullPath()) + return new SyntheticSourceSupport.Native( + () -> new CompositeSyntheticFieldLoader( + leafName(), + fullPath(), + new AggregateMetricSyntheticFieldLoader(fullPath(), metrics), + new CompositeSyntheticFieldLoader.MalformedValuesLayer(fullPath()) + ) ); - - return new SyntheticSourceSupport.Native(loader); } public static class AggregateMetricSyntheticFieldLoader implements CompositeSyntheticFieldLoader.DocValuesLayer { diff --git a/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java b/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java index f17ff728afd0c..4c04458af503d 100644 --- a/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java +++ b/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java @@ -355,16 +355,14 @@ protected SyntheticSourceSupport syntheticSourceSupport() { String const_value = fieldType().value(); if (const_value == null) { - return new SyntheticSourceSupport.Native(SourceLoader.SyntheticFieldLoader.NOTHING); + return new SyntheticSourceSupport.Native(() -> SourceLoader.SyntheticFieldLoader.NOTHING); } - var loader = new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), false) { + return new SyntheticSourceSupport.Native(() -> new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), false) { @Override protected void writeValue(XContentBuilder b, long ignored) throws IOException { b.value(const_value); } - }; - - return new SyntheticSourceSupport.Native(loader); + }); } } diff --git a/x-pack/plugin/mapper-counted-keyword/src/main/java/org/elasticsearch/xpack/countedkeyword/CountedKeywordFieldMapper.java b/x-pack/plugin/mapper-counted-keyword/src/main/java/org/elasticsearch/xpack/countedkeyword/CountedKeywordFieldMapper.java index da03577d6a19e..0e09fb44f9e5d 100644 --- a/x-pack/plugin/mapper-counted-keyword/src/main/java/org/elasticsearch/xpack/countedkeyword/CountedKeywordFieldMapper.java +++ b/x-pack/plugin/mapper-counted-keyword/src/main/java/org/elasticsearch/xpack/countedkeyword/CountedKeywordFieldMapper.java @@ -507,8 +507,9 @@ protected SyntheticSourceSupport syntheticSourceSupport() { return super.syntheticSourceSupport(); } - var loader = new CountedKeywordFieldSyntheticSourceLoader(fullPath(), countFieldMapper.fullPath(), leafName()); - return new SyntheticSourceSupport.Native(loader); + return new SyntheticSourceSupport.Native( + () -> new CountedKeywordFieldSyntheticSourceLoader(fullPath(), countFieldMapper.fullPath(), leafName()) + ); } } diff --git a/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java b/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java index 807cb16a363b1..7af69a1a2b453 100644 --- a/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java +++ b/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java @@ -754,14 +754,14 @@ public void doValidate(MappingLookup lookup) { @Override protected SyntheticSourceSupport syntheticSourceSupport() { if (hasDocValues) { - var loader = new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), ignoreMalformed()) { - @Override - protected void writeValue(XContentBuilder b, long value) throws IOException { - b.value(DocValueFormat.UNSIGNED_LONG_SHIFTED.format(value)); + return new SyntheticSourceSupport.Native( + () -> new SortedNumericDocValuesSyntheticFieldLoader(fullPath(), leafName(), ignoreMalformed()) { + @Override + protected void writeValue(XContentBuilder b, long value) throws IOException { + b.value(DocValueFormat.UNSIGNED_LONG_SHIFTED.format(value)); + } } - }; - - return new SyntheticSourceSupport.Native(loader); + ); } return super.syntheticSourceSupport(); diff --git a/x-pack/plugin/mapper-version/src/main/java/org/elasticsearch/xpack/versionfield/VersionStringFieldMapper.java b/x-pack/plugin/mapper-version/src/main/java/org/elasticsearch/xpack/versionfield/VersionStringFieldMapper.java index b49b4500ce7b7..37b0300651a9a 100644 --- a/x-pack/plugin/mapper-version/src/main/java/org/elasticsearch/xpack/versionfield/VersionStringFieldMapper.java +++ b/x-pack/plugin/mapper-version/src/main/java/org/elasticsearch/xpack/versionfield/VersionStringFieldMapper.java @@ -435,19 +435,19 @@ public FieldMapper.Builder getMergeBuilder() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { - var loader = new CompositeSyntheticFieldLoader(leafName(), fullPath(), new SortedSetDocValuesSyntheticFieldLoaderLayer(fullPath()) { - @Override - protected BytesRef convert(BytesRef value) { - return VersionEncoder.decodeVersion(value); - } - - @Override - protected BytesRef preserve(BytesRef value) { - // Convert copies the underlying bytes - return value; - } - }); + return new SyntheticSourceSupport.Native( + () -> new CompositeSyntheticFieldLoader(leafName(), fullPath(), new SortedSetDocValuesSyntheticFieldLoaderLayer(fullPath()) { + @Override + protected BytesRef convert(BytesRef value) { + return VersionEncoder.decodeVersion(value); + } - return new SyntheticSourceSupport.Native(loader); + @Override + protected BytesRef preserve(BytesRef value) { + // Convert copies the underlying bytes + return value; + } + }) + ); } } diff --git a/x-pack/plugin/rank-vectors/src/main/java/org/elasticsearch/xpack/rank/vectors/mapper/RankVectorsFieldMapper.java b/x-pack/plugin/rank-vectors/src/main/java/org/elasticsearch/xpack/rank/vectors/mapper/RankVectorsFieldMapper.java index 873d67e76b04a..a595eedaf4b8d 100644 --- a/x-pack/plugin/rank-vectors/src/main/java/org/elasticsearch/xpack/rank/vectors/mapper/RankVectorsFieldMapper.java +++ b/x-pack/plugin/rank-vectors/src/main/java/org/elasticsearch/xpack/rank/vectors/mapper/RankVectorsFieldMapper.java @@ -375,7 +375,7 @@ public FieldMapper.Builder getMergeBuilder() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { - return new SyntheticSourceSupport.Native(new DocValuesSyntheticFieldLoader()); + return new SyntheticSourceSupport.Native(DocValuesSyntheticFieldLoader::new); } private class DocValuesSyntheticFieldLoader extends SourceLoader.DocValuesBasedSyntheticFieldLoader { diff --git a/x-pack/plugin/wildcard/src/main/java/org/elasticsearch/xpack/wildcard/mapper/WildcardFieldMapper.java b/x-pack/plugin/wildcard/src/main/java/org/elasticsearch/xpack/wildcard/mapper/WildcardFieldMapper.java index 7784e7ffdda12..bbf02561426af 100644 --- a/x-pack/plugin/wildcard/src/main/java/org/elasticsearch/xpack/wildcard/mapper/WildcardFieldMapper.java +++ b/x-pack/plugin/wildcard/src/main/java/org/elasticsearch/xpack/wildcard/mapper/WildcardFieldMapper.java @@ -992,20 +992,20 @@ public FieldMapper.Builder getMergeBuilder() { @Override protected SyntheticSourceSupport syntheticSourceSupport() { - var layers = new ArrayList(); - layers.add(new WildcardSyntheticFieldLoader()); - if (ignoreAbove != Integer.MAX_VALUE) { - layers.add(new CompositeSyntheticFieldLoader.StoredFieldLayer(originalName()) { - @Override - protected void writeValue(Object value, XContentBuilder b) throws IOException { - BytesRef r = (BytesRef) value; - b.utf8Value(r.bytes, r.offset, r.length); - } - }); - } - - var loader = new CompositeSyntheticFieldLoader(leafName(), fullPath(), layers); - return new SyntheticSourceSupport.Native(loader); + return new SyntheticSourceSupport.Native(() -> { + var layers = new ArrayList(); + layers.add(new WildcardSyntheticFieldLoader()); + if (ignoreAbove != Integer.MAX_VALUE) { + layers.add(new CompositeSyntheticFieldLoader.StoredFieldLayer(originalName()) { + @Override + protected void writeValue(Object value, XContentBuilder b) throws IOException { + BytesRef r = (BytesRef) value; + b.utf8Value(r.bytes, r.offset, r.length); + } + }); + } + return new CompositeSyntheticFieldLoader(leafName(), fullPath(), layers); + }); } private class WildcardSyntheticFieldLoader implements CompositeSyntheticFieldLoader.DocValuesLayer {