public QueryEvaluationContext getNestedContext(JsonNode node, Path relativePath) { return new QueryEvaluationContext(this, node, relativePath); }
@Override public boolean evaluate(QueryEvaluationContext ctx) { boolean ret = false; JsonNode node = ctx.getNode(field); if (node instanceof ArrayNode) { ArrayNode array = (ArrayNode) node; int index = 0; QueryEvaluationContext nestedCtx = null; for (Iterator<JsonNode> itr = array.elements(); itr.hasNext();) { JsonNode arrayElem = itr.next(); if (index == 0) { nestedCtx = ctx.firstElementNestedContext(arrayElem, field); } else { nestedCtx.elementNestedContext(arrayElem, index); } if (ev.evaluate(nestedCtx)) { ret = true; } index++; } } ctx.setResult(ret); return ret; } }
public QueryEvaluationContext getNestedContext(Path relativePath) { return getNestedContext(JsonDoc.get(contextRoot, relativePath), relativePath); }
@Override public boolean evaluate(QueryEvaluationContext ctx) { LOGGER.debug("evaluate {} {}", relativePath, regex); KeyValueCursor<Path, JsonNode> cursor = ctx.getNodes(relativePath); while (cursor.hasNext()) { cursor.next(); JsonNode valueNode = cursor.getCurrentValue(); Object docValue; if (valueNode != null) { docValue = fieldMd.getType().fromJson(valueNode); } else { docValue = null; } LOGGER.debug(" value={}", valueNode); ctx.setResult(false); if (docValue != null) { ctx.setResult(regex.matcher(docValue.toString()).matches()); } if (ctx.getResult()) { break; } } return ctx.getResult(); } }
@Override public boolean evaluate(QueryEvaluationContext ctx) { boolean ret = false; KeyValueCursor<Path, JsonNode> cursor = ctx.getNodes(field); while(cursor.hasNext()&&!ret) { cursor.next(); JsonNode node=cursor.getCurrentValue(); if (node instanceof ArrayNode) { ArrayNode array = (ArrayNode) node; int index = 0; QueryEvaluationContext nestedCtx = null; for (Iterator<JsonNode> itr = array.elements(); itr.hasNext();) { JsonNode arrayElem = itr.next(); if (index == 0) { nestedCtx = ctx.firstElementNestedContext(arrayElem, field); } else { nestedCtx.elementNestedContext(arrayElem, index); } if (ev.evaluate(nestedCtx)) { ret = true; } index++; } } } ctx.setResult(ret); return ret; } }
@Override protected Projection.Inclusion projectArray(Path p, QueryEvaluationContext ctx) { LOGGER.debug("Evaluating array query projection for {}", p); Path contextRoot = ctx.getPath(); QueryEvaluationContext nestedContext = ctx.getNestedContext(contextRoot.isEmpty() ? p : p.suffix(-contextRoot.numSegments())); if (query.evaluate(nestedContext)) { LOGGER.debug("query evaluates to true"); return isIncluded() ? Projection.Inclusion.explicit_inclusion : Projection.Inclusion.explicit_exclusion; } return isIncluded() ? Projection.Inclusion.explicit_exclusion : Projection.Inclusion.explicit_inclusion; } }
@Override public boolean evaluate(QueryEvaluationContext ctx) { boolean ret = false; JsonNode node = ctx.getNode(expr.getArray()); if (node instanceof ArrayNode) { ArrayNode array = (ArrayNode) node; List<Value> values = expr.getValues(); ContainsOperator op = expr.getOp(); Type t = elem.getType(); int numElementsContained = 0; for (Iterator<JsonNode> itr = array.elements(); itr.hasNext();) { JsonNode valueNode = itr.next(); for (Value value : values) { Object v = value.getValue(); if (isValueInNode(valueNode, v, t)) { numElementsContained++; break; } } } ret = evaluateContainsOperator(op, numElementsContained, values); } ctx.setResult(ret); return ret; }
@Override public boolean evaluate(QueryEvaluationContext ctx) { ctx.setResult(true); return true; } }
@Override public boolean evaluate(QueryEvaluationContext ctx) { LOGGER.debug("evaluate {} {}", relativePath, regex); KeyValueCursor<Path, JsonNode> cursor = ctx.getNodes(relativePath); boolean ret = false; while (cursor.hasNext()) { cursor.next(); JsonNode valueNode = cursor.getCurrentValue(); Object docValue; if (valueNode != null) { docValue = fieldMd.getType().fromJson(valueNode); } else { docValue = null; } LOGGER.debug(" value={}", valueNode); if (docValue != null) { ret = regex.matcher(docValue.toString()).matches(); } if (ret) { break; } } ctx.setResult(ret); return ret; } }
@Override public Stream<ResultDocument> stream() { return super.stream().filter(doc -> { boolean ret=qe.evaluate(doc.getDoc()).getResult(); if(ret&&recordResultSetSize) ctx.setMatchCount(ctx.getMatchCount()+1); return ret; }); } };
@Override public boolean evaluate(QueryEvaluationContext ctx) { LOGGER.debug("evaluate {} {} {}", field, operator, values); KeyValueCursor<Path, JsonNode> cursor = ctx.getNodes(field, true); boolean ret = false; while (cursor.hasNext()) { cursor.next(); JsonNode valueNode = cursor.getCurrentValue(); Object docValue = fieldMd.getType().fromJson(valueNode); LOGGER.debug(" value={}", valueNode); boolean in = values.contains(docValue); LOGGER.debug(" result={}", in); if (in) { ret = true; break; } } ctx.setResult(operator.apply(ret)); return ctx.getResult(); } }
@Override public boolean evaluate(QueryEvaluationContext ctx) { boolean ret = false; KeyValueCursor<Path, JsonNode> cursor = ctx.getNodes(field); while(cursor.hasNext()&&!ret) { cursor.next(); JsonNode node=cursor.getCurrentValue(); if (node instanceof ArrayNode) { ArrayNode array = (ArrayNode) node; int index = 0; QueryEvaluationContext nestedCtx = null; for (Iterator<JsonNode> itr = array.elements(); itr.hasNext();) { JsonNode arrayElem = itr.next(); if (index == 0) { nestedCtx = ctx.firstElementNestedContext(arrayElem, field); } else { nestedCtx.elementNestedContext(arrayElem, index); } if (ev.evaluate(nestedCtx)) { ret = true; } index++; } } } ctx.setResult(ret); return ret; } }
@Override protected Projection.Inclusion projectArray(Path p, QueryEvaluationContext ctx) { LOGGER.debug("Evaluating array query projection for {}", p); Path contextRoot = ctx.getPath(); QueryEvaluationContext nestedContext = ctx.getNestedContext(contextRoot.isEmpty() ? p : p.suffix(-contextRoot.numSegments())); if (query.evaluate(nestedContext)) { LOGGER.debug("query evaluates to true"); return isIncluded() ? Projection.Inclusion.explicit_inclusion : Projection.Inclusion.explicit_exclusion; } return isIncluded() ? Projection.Inclusion.explicit_exclusion : Projection.Inclusion.explicit_inclusion; } }
@Override public boolean evaluate(QueryEvaluationContext ctx) { boolean ret = false; JsonNode node = ctx.getNode(expr.getArray()); if (node instanceof ArrayNode) { ArrayNode array = (ArrayNode) node; List<Value> values = expr.getValues(); ContainsOperator op = expr.getOp(); Type t = elem.getType(); int numElementsContained = 0; for (Iterator<JsonNode> itr = array.elements(); itr.hasNext();) { JsonNode valueNode = itr.next(); for (Value value : values) { Object v = value.getValue(); if (isValueInNode(valueNode, v, t)) { numElementsContained++; break; } } } ret = evaluateContainsOperator(op, numElementsContained, values); } ctx.setResult(ret); return ret; }
public boolean evaluate(QueryEvaluationContext ctx) { ctx.setResult(true); return true; } };
@Override public boolean evaluate(QueryEvaluationContext ctx) { LOGGER.debug("evaluate {} {}", relativePath, regex); KeyValueCursor<Path, JsonNode> cursor = ctx.getNodes(relativePath); boolean ret = false; while (cursor.hasNext()) { cursor.next(); JsonNode valueNode = cursor.getCurrentValue(); Object docValue; if (valueNode != null) { docValue = fieldMd.getType().fromJson(valueNode); } else { docValue = null; } LOGGER.debug(" value={}", valueNode); if (docValue != null) { ret = regex.matcher(docValue.toString()).matches(); } if (ret) { break; } } ctx.setResult(ret); return ret; } }
@Override public Stream<ResultDocument> stream() { return super.stream().filter(doc -> { boolean ret=qe.evaluate(doc.getDoc()).getResult(); if(ret&&recordResultSetSize) ctx.setMatchCount(ctx.getMatchCount()+1); return ret; }); } };
@Override public boolean evaluate(QueryEvaluationContext ctx) { LOGGER.debug("evaluate {} {} {}", field, operator, values); KeyValueCursor<Path, JsonNode> cursor = ctx.getNodes(field, true); boolean ret = false; while (cursor.hasNext()) { cursor.next(); JsonNode valueNode = cursor.getCurrentValue(); Object docValue = fieldMd.getType().fromJson(valueNode); LOGGER.debug(" value={}", valueNode); boolean in = values.contains(docValue); LOGGER.debug(" result={}", in); if (in) { ret = true; break; } } ctx.setResult(operator.apply(ret)); return ctx.getResult(); } }