/** * Create a new SpanMultiTermQueryWrapper. * * @param query Query to wrap. */ @SuppressWarnings({"rawtypes","unchecked"}) public SpanMultiTermQueryWrapper(Q query) { this.query = Objects.requireNonNull(query); this.rewriteMethod = selectRewriteMethod(query); }
@Override public int hashCode() { return classHash() * 31 + query.hashCode(); }
@Override public boolean equals(Object other) { return sameClassAs(other) && query.equals(((SpanMultiTermQueryWrapper<?>) other).query); }
for (int j = 0; j < terms[i].length; j++) { if (i == sizeMinus1) { innerQueries[j] = new SpanMultiTermQueryWrapper(new PrefixQuery(terms[i][j])); } else { innerQueries[j] = new SpanTermQuery(terms[i][j]);
spanQuery = new SpanMultiTermQueryWrapper<>(prefixQuery); } else { + MultiTermQuery.class.getName() + " but was " + subQuery.getClass().getName()); spanQuery = new SpanMultiTermQueryWrapper<>((MultiTermQuery) subQuery); SpanMultiTermQueryWrapper<?> wrapper = (SpanMultiTermQueryWrapper<?>) spanQuery; if (multiTermQuery.getRewriteMethod() instanceof TopTermsRewrite == false) { wrapper.setRewriteMethod(new TopTermSpanBooleanQueryRewriteWithMaxClause());
@Override public String toString(String field) { return "SPANWRAP(" + query.getWrappedQuery() + ")"; }
@Override public Query rewrite(IndexReader reader) throws IOException { if (getBoost() != 1f) { return super.rewrite(reader); } return rewriteMethod.rewrite(reader, query); }
private Query toSpanQueryPrefix(SpanQuery query, float boost) { if (query instanceof SpanTermQuery) { SpanMultiTermQueryWrapper<PrefixQuery> ret = new SpanMultiTermQueryWrapper<>(new PrefixQuery(((SpanTermQuery) query).getTerm())); return boost == 1 ? ret : new BoostQuery(ret, boost); } else if (query instanceof SpanNearQuery) { SpanNearQuery spanNearQuery = (SpanNearQuery) query; SpanQuery[] clauses = spanNearQuery.getClauses(); if (clauses[clauses.length - 1] instanceof SpanTermQuery) { clauses[clauses.length - 1] = new SpanMultiTermQueryWrapper<>( new PrefixQuery(((SpanTermQuery) clauses[clauses.length - 1]).getTerm()) ); } SpanNearQuery newQuery = new SpanNearQuery(clauses, spanNearQuery.getSlop(), spanNearQuery.isInOrder()); return boost == 1 ? newQuery : new BoostQuery(newQuery, boost); } else if (query instanceof SpanOrQuery) { SpanOrQuery orQuery = (SpanOrQuery) query; SpanQuery[] clauses = new SpanQuery[orQuery.getClauses().length]; for (int i = 0; i < clauses.length; i++) { clauses[i] = (SpanQuery) toSpanQueryPrefix(orQuery.getClauses()[i], 1); } return boost == 1 ? new SpanOrQuery(clauses) : new BoostQuery(new SpanOrQuery(clauses), boost); } else { return query; } }
spanQuery = new SpanMultiTermQueryWrapper<>(prefixQuery); } else { + MultiTermQuery.class.getName() + " but was " + subQuery.getClass().getName()); spanQuery = new SpanMultiTermQueryWrapper<>((MultiTermQuery) subQuery); SpanMultiTermQueryWrapper<?> wrapper = (SpanMultiTermQueryWrapper<?>) spanQuery; if (multiTermQuery.getRewriteMethod() instanceof TopTermsRewrite == false) { wrapper.setRewriteMethod(new TopTermSpanBooleanQueryRewriteWithMaxClause());
protected String getRegex() { String pattern = term.text(); Query wrapped = query.getWrappedQuery(); String regex; if (wrapped instanceof RegexpQuery) { regex = pattern; } else if (wrapped instanceof WildcardQuery) { regex = StringUtil.wildcardToRegex(pattern); } else if (wrapped instanceof PrefixQuery) { regex = "^" + StringUtil.escapeRegexCharacters(pattern) + ".*$"; } else { throw new UnsupportedOperationException("Cannot make regex from " + wrapped); } return regex; }
@Override public Query rewrite(IndexReader reader) throws IOException { if (getBoost() != 1f) { return super.rewrite(reader); } return rewriteMethod.rewrite(reader, query); }
public BLSpanMultiTermQueryWrapper(Q query) { try { // Use reflection to get at inaccesible field MultiTermQuery.field. // We need this in order to (decide whether to) optimize this to an NFA. Field fldTerm = AutomatonQuery.class.getDeclaredField("term"); fldTerm.setAccessible(true); this.term = (Term)fldTerm.get(query); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { throw new RuntimeException(e); } this.query = new SpanMultiTermQueryWrapper<>(query); }
spanQuery = new SpanMultiTermQueryWrapper<>(prefixQuery); } else { + MultiTermQuery.class.getName() + " but was " + subQuery.getClass().getName()); spanQuery = new SpanMultiTermQueryWrapper<>((MultiTermQuery) subQuery); SpanMultiTermQueryWrapper<?> wrapper = (SpanMultiTermQueryWrapper<?>) spanQuery; if (multiTermQuery.getRewriteMethod() instanceof TopTermsRewrite == false) { wrapper.setRewriteMethod(new TopTermSpanBooleanQueryRewriteWithMaxClause());
/** * Create a new SpanMultiTermQueryWrapper. * * @param query Query to wrap. */ @SuppressWarnings({"rawtypes","unchecked"}) public SpanMultiTermQueryWrapper(Q query) { this.query = Objects.requireNonNull(query); this.rewriteMethod = selectRewriteMethod(query); }
@Override public long reverseMatchingCost(IndexReader reader) { String pattern = term.text(); Query wrapped = query.getWrappedQuery(); int numberOfChars; if (wrapped instanceof RegexpQuery) {
@Override public boolean equals(Object other) { return sameClassAs(other) && query.equals(((SpanMultiTermQueryWrapper<?>) other).query); }
@Override public int hashCode() { return classHash() * 31 + query.hashCode(); }
protected Query rewriteMultiTermQuery(MultiTermQuery mtq) { return forceOffsets(new SpanMultiTermQueryWrapper<>(mtq)); }
/** * Create a new SpanMultiTermQueryWrapper. * * @param query Query to wrap. */ @SuppressWarnings({"rawtypes","unchecked"}) public SpanMultiTermQueryWrapper(Q query) { this.query = Objects.requireNonNull(query); this.rewriteMethod = selectRewriteMethod(query); }
list.addAll(Arrays.asList(extractAutomata(((SpanPositionCheckQuery) query).getMatch(), field))); } else if (query instanceof SpanMultiTermQueryWrapper) { list.addAll(Arrays.asList(extractAutomata(((SpanMultiTermQueryWrapper<?>) query).getWrappedQuery(), field))); } else if (query instanceof AutomatonQuery) { final AutomatonQuery aq = (AutomatonQuery) query;