public boolean isPrefixOf(final querqy.model.Term other) { if (isPrefixOfCharSequence(other)) { final String otherFieldname = other.getField(); if (fieldNames == null) { return true; } else if (otherFieldname != null && fieldNames.contains(otherFieldname)){ return true; } } return false; }
@Override public Term next() { tryFillSlotIfEmpty(); if (slot == null || !eq(slot.getField(), field)) { throw new NoSuchElementException("No more terms"); } else { Term term = slot; slot = null; return term; } }
@Override public boolean hasNext() { return tryFillSlotIfEmpty() && eq(slot.getField(), field); }
public Set<String> getSearchFields(Term term) { String fieldname = term.getField(); if (fieldname != null) { if (term.isGenerated() || queryFieldsAndBoostings.containsKey(fieldname)) { return new HashSet<>(Collections.singletonList(fieldname)); } else { return Collections.emptySet(); } } else { return term.isGenerated() ? generatedQueryFieldsAndBoostings.keySet() : queryFieldsAndBoostings.keySet(); } }
public boolean hasSearchField(String searchField, Term term) { String fieldname = term.getField(); if (fieldname != null) { return term.isGenerated() || (fieldname.equals(searchField) && queryFieldsAndBoostings.containsKey(fieldname)); } else { return term.isGenerated() ? generatedQueryFieldsAndBoostings.containsKey(searchField) : queryFieldsAndBoostings.containsKey(searchField); } }
@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); }
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) { if (previousTerm != null && eq(previousTerm.getField(), term.getField()) && (term.isGenerated() == acceptGeneratedTerms || !term.isGenerated()) && (previousTerm.isGenerated() == acceptGeneratedTerms || !previousTerm.isGenerated())) { final CharSequence seq = new CompoundCharSequence(null, previousTerm, term); termsToAdd.add(buildShingle(previousTerm, seq)); termsToAdd.add(buildShingle(term, seq)); } previousTerm = term; return term; }
term.getField());
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))); } } }
for (final RewriterFactory factory : factories) { for (final Term term: factory.getGenerableTerms()) { final String field = term.getField(); if (field != null) { if (preloadFields.containsKey(field)) {
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); } }
@Override protected boolean matchesSafely(Term item) { return item != null && // expectedField == null -> do not compare field name. (expectedField == null || expectedField.equals(item.getField())) && // Using toString() here to avoid incompatibilities between // equals() of different char sequences. CharSequenceUtil.equals(expectedValue, item.getValue()) && // expectedValue.equals(item.getValue().toString()) && ((expectedGenerated == null) || (expectedGenerated.booleanValue() == item.isGenerated())) ; } }
public FieldBoost getFieldBoost(Term term) { String fieldname = term.getField(); if (fieldname != null) { if (term.isGenerated() ) { return new IndependentFieldBoost(generatedQueryFieldsAndBoostings, defaultGeneratedFieldBoostFactor); } if (queryFieldsAndBoostings.containsKey(fieldname)) { return new IndependentFieldBoost(queryFieldsAndBoostings, defaultGeneratedFieldBoostFactor); } } else { switch (fieldBoostModel) { case FIXED: return (term.isGenerated()) ? new IndependentFieldBoost(generatedQueryFieldsAndBoostings, defaultGeneratedFieldBoostFactor) : new IndependentFieldBoost(queryFieldsAndBoostings, defaultGeneratedFieldBoostFactor); case NONE: return ConstantFieldBoost.NORM_BOOST; case PRMS: return new PRMSFieldBoost(); default: throw new IllegalStateException("Unknown FieldBoostModel: " + fieldBoostModel); } } return null; }
@Override public Node visit(final Term term) { final ComparableCharSequence value = term.getValue(); if (value instanceof querqy.rewrite.commonrules.model.Term) { querqy.rewrite.commonrules.model.Term termValue = (querqy.rewrite.commonrules.model.Term) value; final ComparableCharSequence newValue = termValue.fillPlaceholders(termMatches); return new Term((DisjunctionMaxQuery) getNewParent(), term.getField(), newValue, true); } else { return term.clone((DisjunctionMaxQuery) getNewParent(), true); } }
final String fieldname = term.getField();