private Term buildShingle(final Term term, final CharSequence seq) { return new Term(term.getParent(), term.getField(), seq, true); }
@Override public Node visit(final Term term) { final String value = term.getValue().toString(); final int pos = value.indexOf('$'); if ((pos < 0) || (pos == value.length() - 1) || !Character.isDigit(value.charAt(pos + 1))) { return term; } final querqy.rewrite.commonrules.model.Term charSequence = new querqy.rewrite.commonrules.model.Term( value.toCharArray(), 0, value.length(), term.getField() == null ? null : Collections.singletonList(term.getField())); return new Term(term.getParent(), term.getField(), charSequence, true); }
@Override public ExpandedQuery rewrite(final ExpandedQuery query) { final QuerqyQuery<?> userQuery = query.getUserQuery(); if (userQuery != null && userQuery instanceof Query){ previousTerm = null; termsToAdd = new LinkedList<>(); visit((Query) userQuery); for (Term term : termsToAdd) { term.getParent().addClause(term); } } return query; }
private void addCompounds(final ArrayDeque<Term> terms, final boolean reverse) throws IOException { final CombineSuggestion[] combinations = suggestCombination(reverse ? terms.descendingIterator() : terms.iterator()); if (combinations != null && combinations.length > 0) { final Term[] termArray; if (reverse) { termArray = new Term[terms.size()]; int i = terms.size() - 1; final Iterator<Term> termIterator = terms.descendingIterator(); while (termIterator.hasNext()) { termArray[i--] = termIterator.next(); } } else { termArray = terms.toArray(new Term[0]); } for (final CombineSuggestion suggestion : combinations) { // add compound to each sibling that is part of the compound to maintain mm logic Arrays.stream(suggestion.originalTermIndexes) .mapToObj(idx -> termArray[idx]) .forEach(sibling -> nodesToAdd.add( new Term(sibling.getParent(), sibling.getField(), suggestion.suggestion.string, true))); } } }
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); } } }
DisjunctionMaxQuery parentQuery = term.getParent(); BooleanQuery grandParent = null;
case 1: { final Term match = termMatches.get(0).getQueryTerm(); final DisjunctionMaxQuery parent = match.getParent(); final BooleanQuery bq = new BooleanQuery(match.getParent(), Occur.SHOULD, true); match.getParent().addClause(bq); for (final querqy.rewrite.commonrules.model.Term synTerm: synonym) { final DisjunctionMaxQuery dmq = new DisjunctionMaxQuery(bq, Occur.MUST, true); for (final TermMatch match: termMatches) { final DisjunctionMaxQuery clauseDmq = match.getQueryTerm().getParent();
protected void decompound(final Term term) { // determine the nodesToAdd based on the term try { for (final SuggestWord[] decompounded : suggestWordbreaks(term)) { if (decompounded != null && decompounded.length > 0) { final BooleanQuery bq = new BooleanQuery(term.getParent(), Clause.Occur.SHOULD, true); for (final SuggestWord word : decompounded) { final DisjunctionMaxQuery dmq = new DisjunctionMaxQuery(bq, Clause.Occur.MUST, true); bq.addClause(dmq); dmq.addClause(new Term(dmq, term.getField(), word.string, true)); } nodesToAdd.add(bq); } } } catch (final IOException e) { // IO is broken, this looks serious -> throw as RTE throw new RuntimeException("Error decompounding " + term, e); } }
DisjunctionMaxQuery currentDmq = term.getParent();