private boolean isMatching(JsonNode jsonNode, Query termOrRangeQuery, String fieldName) throws ProjectionException { if (termOrRangeQuery instanceof NodeTermQuery || termOrRangeQuery instanceof NodePrefixQuery) { Pattern termPat = null; if (termOrRangeQuery instanceof NodeTermQuery) { termPat = Pattern.compile(((NodeTermQuery) termOrRangeQuery).getTerm().text(), Pattern.CASE_INSENSITIVE); } else if (termOrRangeQuery instanceof NodePrefixQuery) { termPat = Pattern.compile(((NodePrefixQuery) termOrRangeQuery).getPrefix().text() + ".*", Pattern.CASE_INSENSITIVE); } if (jsonNode.isObject()) { if (termPat.matcher(jsonNode.get(fieldName).asText()).matches()) { return true; } } else { if (termPat.matcher(jsonNode.asText()).matches()) { return true; } } return false; } else if (termOrRangeQuery instanceof NodeNumericRangeQuery<?>) { return evaluateNumericRangeQuery(jsonNode, (NodeNumericRangeQuery<?>) termOrRangeQuery); } return false; }