### Description

This is a followup to #85926.

As part of the ingest processing pipeline, we call `CollectionUtils.ensureNoSelfReferences(...)` to ensure that a script processor didn't accidentally introduce a circular object. However, this check is only necessary if we know there was the potential for a circular option, which can only happen with either a custom processor (a plugin where we have no control), or a script processor. We should be able to only call this sanity check if we know we need it, rather than for every document.
libs/x-content/src/main/java/org/elasticsearch/xcontent/XContentBuilder.java
}
    public XContentBuilder copyCurrentStructure(XContentParser parser) throws IOException {
        generator.copyCurrentStructure(parser);
        return this;
    }
    /**
     * Write the content that is written to the output stream by the {@code writer} as a string encoded in Base64 format.
     * This API can be used to generate XContent directly without the intermediate results to reduce memory usage.
     * Note that this method supports only JSON.
     */
    public XContentBuilder directFieldAsBase64(String name, CheckedConsumer<OutputStream, IOException> writer) throws IOException {
        if (contentType() != XContentType.JSON) {
            assert false : "directFieldAsBase64 supports only JSON format";
            throw new UnsupportedOperationException("directFieldAsBase64 supports only JSON format");
        }
        generator.writeDirectField(name, os -> {
            os.write('\"');
            
            
            final OutputStream noClose = Streams.noCloseStream(os);
            final OutputStream encodedOutput = Base64.getEncoder().wrap(noClose);
            writer.accept(encodedOutput);
            encodedOutput.close(); 
            os.write('\"');
        });
        return this;
    }
    /**
     * Returns a version used for serialising a response.
     * @return a compatible version