public List<E> parseResultsOptimized(List<JsonElement> hits, PredicateQuery query) { List<E> results = new ArrayList<>(); Map<String, Object> source; try { for (JsonElement hit : hits) { JsonObject hitJson = hit.getAsJsonObject(); JsonElement tempSource = hitJson.get("_source"); if (tempSource != null) { String sTempSource = tempSource.toString(); source = mapper.readValue(sTempSource, Map.class); } else source = new HashMap<>(); Document document = new Document(hitJson.get("_index").getAsString(),hitJson.get("_type").getAsString(),hitJson.get("_id").getAsString(),source); Collection<E> elements = fromDocument(document); if(elements != null) { elements.forEach(element -> { if(element != null && query.test(element, query.getPredicates())) results.add(element); }); } } } catch (IOException e) { e.printStackTrace(); } return results; }
public boolean test(E element, PredicatesHolder predicates) { if(predicates.getClause().equals(PredicatesHolder.Clause.And)) { if (!HasContainer.testAll(element, predicates.getPredicates())) return false; for (PredicatesHolder child : predicates.getChildren()) { if (!test(element, child)) return false; } return true; } else { for(HasContainer has : predicates.getPredicates()) { if (has.test(element)) return true; } for (PredicatesHolder child : predicates.getChildren()) { if (test(element, child)) return true; } return false; } }
if (element != null && query.test(element, query.getPredicates())) elements.add(element);
@Override public List<E> parseResults(List<String> resultList, PredicateQuery query) { List<E> results = new ArrayList<>(); for( String result : resultList) try { JsonNode hits = mapper.readTree(result).get("hits").get("hits"); for (JsonNode hit : hits) { Map<String, Object> source = hit.has("_source") ? mapper.readValue(hit.get("_source").toString(), Map.class) : new HashMap<>(); Document document = new Document(hit.get("_index").asText(), hit.get("_type").asText(), hit.get("_id").asText(), source); Collection<E> elements = fromDocument(document); if(elements != null) { elements.forEach(element -> { if(element != null && query.test(element, query.getPredicates())) results.add(element); }); } } } catch (IOException e) { e.printStackTrace(); } return results; } public List<E> parseResultsOptimized(List<JsonElement> hits, PredicateQuery query) {