/** * Optimize a query or an array of queries * @param children a single query or an array of queries * @param parentClause the parent clause in which the children are embedded * @return the optimized query/queries */ private static Object optimizeChildren(Object children, String parentClause) { if (children instanceof JsonArray) { return optimizeChildren((JsonArray)children, parentClause); } else { return optimize((JsonObject)children, parentClause); } }
/** * Optimize an array of queries * @param children the queries to optimize * @param parentClause the parent clause in which the children are embedded * @return the optimized queries */ private static JsonArray optimizeChildren(JsonArray children, String parentClause) { JsonArray copy = new JsonArray(); for (int i = 0; i < children.size(); ++i) { Object c = children.getValue(i); Object newc = optimizeChildren(c, parentClause); if (newc instanceof JsonArray) { // merge optimized array into this one copy.addAll((JsonArray)newc); } else { copy.add(newc); } } return copy; } }
bool.put("should", optimizeChildren(should, "should")); bool.put("must", optimizeChildren(must, "must")); bool.put("must_not", optimizeChildren(must_not, "must_not"));