public QuerqyQuery<?> cloneAndReplace(QuerqyQuery<?> querqyQuery) { if (querqyQuery instanceof Query) { return (QuerqyQuery<?>) visit((Query) query); } else { return (QuerqyQuery) querqyQuery.accept(this); } }
@Override public void apply(final PositionSequence<Term> sequence, final TermMatches termMatches, final int startPosition, final int endPosition, final ExpandedQuery expandedQuery, final Map<String, Object> context) { // TODO: we might not need to clone here, if we already cloned all queries in the constructor expandedQuery.addFilterQuery(filterQuery.clone(null, true)); }
public void testThatMainQueryIsNotMarkedAsGenerated() { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); BoostInstruction boostInstruction = new BoostInstruction(makeQuery("-a b").getUserQuery(), BoostDirection.UP, 0.5f); builder.addRule(new Input(Arrays.asList(mkTerm("x")), false, false), new Instructions(Arrays.asList((Instruction) boostInstruction))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery("x"); QuerqyQuery<?> mainQuery = rewriter.rewrite(query, EMPTY_CONTEXT).getUserQuery(); assertFalse(mainQuery.isGenerated()); }
@Test public void testThatMainQueryIsNotMarkedAsGenerated() { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); FilterInstruction filterInstruction = new FilterInstruction(makeQuery("a").getUserQuery()); builder.addRule(new Input(Arrays.asList(mkTerm("x")), false, false), new Instructions(Arrays.asList((Instruction) filterInstruction))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery("x"); QuerqyQuery<?> mainQuery = rewriter.rewrite(query, EMPTY_CONTEXT).getUserQuery(); assertFalse(mainQuery.isGenerated()); }
public Query createQuery(final QuerqyQuery<?> query) { if (query instanceof querqy.model.BooleanQuery) { parentType = ParentType.BQ; LuceneQueryFactory<?> factory = query.accept(this); termQueryBuilder.getDocumentFrequencyCorrection() .ifPresent(dfc -> factory.prepareDocumentFrequencyCorrection(dfc, false)); return factory.createQuery(null, dmqTieBreakerMultiplier, termQueryBuilder); } else if (query instanceof MatchAllQuery) { return new MatchAllDocsQuery(); } else { throw new IllegalArgumentException("Cannot handle query of type " + query.getClass().getName()); } }
@Override public void apply(final PositionSequence<Term> sequence, final TermMatches termMatches, final int startPosition, final int endPosition, final ExpandedQuery expandedQuery, final Map<String, Object> context) { // TODO: we might not need to clone here, if we already cloned all queries in the constructor final QuerqyQuery<?> q = (hasPlaceHolder) ? new CloneAndReplacePlaceHolderRewriter(termMatches).cloneAndReplace(query) : query.clone(null, true); final BoostQuery bq = new BoostQuery(q, boost); if (direction == BoostDirection.DOWN) { expandedQuery.addBoostDownQuery(bq); } else { expandedQuery.addBoostUpQuery(bq); } }