public List<Term> getTerms() { return getClauses(Term.class); }
@Override public T visit(final DisjunctionMaxQuery disjunctionMaxQuery) { for (final DisjunctionMaxClause clause : disjunctionMaxQuery.getClauses()) { clause.accept(this); } return null; }
@Override public Node visit(final DisjunctionMaxQuery dmq) { final List<DisjunctionMaxClause> clauses = dmq.getClauses(); if (clauses != null && !clauses.isEmpty()) { DisjunctionMaxClause nonGeneratedClause = null; for (final DisjunctionMaxClause clause: clauses) { if (!clause.isGenerated()) { // second non-generated clause - cannot handle this if (nonGeneratedClause != null) { throw new IllegalArgumentException("cannot handle more then one non-generated DMQ clause"); } nonGeneratedClause = clause; } } if (nonGeneratedClause != null) { nonGeneratedClause.accept(this); } } return null; }
@Override public DisjunctionMaxQuery visit(final DisjunctionMaxQuery disjunctionMaxQuery) { boolean hasPlaceHolderChild = false; final List<DisjunctionMaxClause> oldClauses = disjunctionMaxQuery.getClauses(); final List<DisjunctionMaxClause> newClauses = new ArrayList<>(oldClauses.size()); for (final DisjunctionMaxClause clause : oldClauses) { final DisjunctionMaxClause mayBeRewritten = (DisjunctionMaxClause) clause.accept(this); newClauses.add(mayBeRewritten); hasPlaceHolderChild |= (mayBeRewritten != clause); } if (hasPlaceHolderChild) { for (final DisjunctionMaxClause clause : oldClauses) { disjunctionMaxQuery.removeClause(clause); } for (final DisjunctionMaxClause clause : newClauses) { disjunctionMaxQuery.addClause(clause); } hasPlaceHolder = true; } return disjunctionMaxQuery; }
@Override public DisjunctionMaxQuery visit(final DisjunctionMaxQuery disjunctionMaxQuery) { final DisjunctionMaxQuery newDMQ = new DisjunctionMaxQuery((BooleanQuery) getNewParent(), disjunctionMaxQuery.occur, true); newParentStack.add(newDMQ); for (final DisjunctionMaxClause clause : disjunctionMaxQuery.getClauses()) { newDMQ.addClause((DisjunctionMaxClause) clause.accept(this)); } newParentStack.removeLast(); return newDMQ; }
@Override public Node visit(final DisjunctionMaxQuery dmq) { final List<DisjunctionMaxClause> clauses = dmq.getClauses();
public void removeIfNotOnlyChild(final Term term) { // remove the term from its parent. If the parent doesn't have any further child, // remove the parent from the grand-parent. If this also hasn't any further child, // do not remove anything // TODO: go until top level? final DisjunctionMaxQuery parentQuery = term.getParent(); if (parentQuery.getClauses().size() > 1) { parentQuery.removeClause(term); } else { final BooleanQuery grandParent = parentQuery.getParent(); if (grandParent != null && grandParent.getClauses().size() > 1) { grandParent.removeClause(parentQuery); } } }
BooleanQuery grandParent = null; if (parentQuery.getClauses().size() < 2) { grandParent = parentQuery.getParent(); if (grandParent.getClauses().size() < 2) {
for (final DisjunctionMaxClause dmqClause : dmq.getClauses()) { if (dmqClause instanceof Term) {