boolean isFuzzyFilterMatch(final ExplorerNode node) {
        // We may have a nameFilter but not a fuzzyMatchPredicate if the user has selected no types
        // in the type filter
        return !hasNameFilter || fuzzyMatchPredicate == null
               || filterOutcomeMap.computeIfAbsent(node.getDocRef(), docRef ->
                FilterOutcome.fromPredicateResult(fuzzyMatchPredicate.test(node)))
                       .isMatch;
    }
Some docRefs will get tested multiple times over the course of building the output tree
so hold a transient cache of filter matches. Also creates a combined predicate that only
includes the required checks bases on what is set in the ExplorerTreeFilter.
stroom-explorer/stroom-explorer-impl/src/main/java/stroom/explorer/impl/NodeInclusionChecker.java