### 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.
server/src/main/java/org/elasticsearch/action/index/IndexRequest.java
if (out.getVersion().onOrAfter(Version.V_7_13_0)) {
            out.writeMap(dynamicTemplates, StreamOutput::writeString, StreamOutput::writeString);
        } else {
            if (dynamicTemplates.isEmpty() == false) {
                throw new IllegalArgumentException("[dynamic_templates] parameter requires all nodes on " + Version.V_7_13_0 + " or later");
            }
        }
    }
    @Override
    public String toString() {
        String sSource = "_na_";
        try {
            if (source.length() > MAX_SOURCE_LENGTH_IN_TOSTRING) {
                sSource = "n/a, actual length: ["
                    + new ByteSizeValue(source.length()).toString()
                    + "], max length: "
                    + new ByteSizeValue(MAX_SOURCE_LENGTH_IN_TOSTRING).toString();
            } else {
                sSource = XContentHelper.convertToJson(source, false);
            }
        } catch (Exception e) {
            
        }
        return "index {[" + index + "][" + id + "], source[" + sSource + "]}";
    }
    @Override
    public boolean includeDataStreams() {
        return true;
    }
    /**