Instructions instructions(String... names) { List<Instruction> instructions = new LinkedList<>(); for (String name : names) { instructions.add(new SimpleInstruction(name)); } return new Instructions(instructions); }
public void nextLine(String line) throws RuleParseException { line = stripLine(line); if (line.length() > 0) { Object lineObject = LineParser.parse(line, input, querqyParserFactory); if (lineObject instanceof Input) { putRule(); input = (Input) lineObject; instructions = new Instructions(); } else if (lineObject instanceof ValidationError) { throw new RuleParseException(lineNumber, ((ValidationError) lineObject).getMessage()); } else { instructions.add((Instruction) lineObject); } } }
@SuppressWarnings("unchecked") @Test public void testThatSingleDecorationIsEmitted() { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); DecorateInstruction deco = new DecorateInstruction("deco1"); builder.addRule(new Input(Arrays.asList(mkTerm("x")), false, false), new Instructions(Arrays.asList((Instruction) deco))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery("a x"); Map<String, Object> context = new HashMap<>(); rewriter.rewrite(query, context); assertThat((Set<Object>)context.get(DecorateInstruction.CONTEXT_KEY), contains( equalTo((Object) "deco1") )); }
@SuppressWarnings("unchecked") @Test public void testDecorationForEmptyInput() throws Exception { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); DecorateInstruction deco = new DecorateInstruction("deco1"); builder.addRule((Input) LineParser.parseInput(LineParser.BOUNDARY + "" + LineParser.BOUNDARY), new Instructions(Arrays.asList((Instruction) deco))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery(""); Map<String, Object> context = new HashMap<>(); rewriter.rewrite(query, context); assertThat((Set<Object>) context.get(DecorateInstruction.CONTEXT_KEY), contains( equalTo((Object) "deco1") )); }
@Test public void testThatTermIsNotRemovedOnceIfThereASecondDMQWithTheSameTermAndNoOtherTermExists() throws Exception { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); DeleteInstruction delete = new DeleteInstruction(Arrays.asList(mkTerm("a"))); builder.addRule(new Input(Arrays.asList(mkTerm("a")), false, false), new Instructions(Arrays.asList((Instruction) delete))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); Query rewritten = (Query) rewriter.rewrite(makeQuery("a a"), EMPTY_CONTEXT).getUserQuery(); assertThat(rewritten, bq( dmq( term("a") ) )); }
@Test public void testThatTermIsRemovedIfThereASecondDMQWithoutTheTerm() throws Exception { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); DeleteInstruction delete = new DeleteInstruction(Arrays.asList(mkTerm("a"))); builder.addRule(new Input(Arrays.asList(mkTerm("a")), false, false), new Instructions(Arrays.asList((Instruction) delete))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); Query rewritten = (Query) rewriter.rewrite(makeQuery("a b"), EMPTY_CONTEXT).getUserQuery(); assertThat(rewritten, bq( dmq( term("b") ) )); }
@Test public void testThatNothingIsDeletedIfWeWouldEndUpWithAnEmptyQuery() { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); DeleteInstruction delete = new DeleteInstruction(Arrays.asList(mkTerm("a"))); builder.addRule(new Input(Arrays.asList(mkTerm("a")), false, false), new Instructions(Arrays.asList((Instruction) delete))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery("a"); Query rewritten = (Query) rewriter.rewrite(query, EMPTY_CONTEXT).getUserQuery(); assertThat(rewritten, bq( dmq( term("a") ) )); }
@Test public void test01() throws Exception { RulesCollection rules = createRulesFromResource("rules-test.txt", false); Term t1 = new Term(null, "aa"); Term t2 = new Term(null, "l"); PositionSequence<InputSequenceElement> seq = new PositionSequence<>(); seq.nextPosition(); seq.addElement(t1); seq.nextPosition(); seq.addElement(t2); List<Action> actions = rules.getRewriteActions(seq); assertThat(actions, contains( new Action( Arrays.asList( new Instructions(Arrays.asList((Instruction) new DeleteInstruction(Arrays.asList(mkTerm("aa")))))), new TermMatches(new TermMatch(t1)), 0, 1))); }
@Test public void test05() throws Exception { RulesCollection rules = createRulesFromResource("rules-test.txt", false); Term t1 = new Term(null, "tf2"); PositionSequence<InputSequenceElement> seq = new PositionSequence<>(); seq.nextPosition(); seq.addElement(t1); List<Action> actions = rules.getRewriteActions(seq); assertThat(actions, contains( new Action( Arrays.asList( new Instructions( Arrays.asList( (Instruction) new FilterInstruction(makeQueryUsingFactory("flt2 flt3"))) )), new TermMatches(new TermMatch(t1)), 0, 1) )); }
@Test public void testThatFilterQueriesAreMarkedAsGenerated() { 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"); Collection<QuerqyQuery<?>> filterQueries = rewriter.rewrite(query, EMPTY_CONTEXT).getFilterQueries(); QuerqyQuery<?> qq = filterQueries.iterator().next(); assertTrue(qq instanceof BooleanQuery); assertThat((BooleanQuery) qq, bq( dmq(must(), term("a", 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 testThatSingleTermIsExpandedWithSingleTerm() { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); SynonymInstruction synInstruction = new SynonymInstruction(Arrays.asList(mkTerm("s1"))); builder.addRule(new Input(Arrays.asList(mkTerm("a"))), new Instructions(Arrays.asList((Instruction) synInstruction))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery("a"); Query rewritten = (Query) rewriter.rewrite(query, EMPTY_CONTEXT).getUserQuery(); assertThat(rewritten, bq( dmq( term("a", false), term("s1", true) ) )); }
@Test public void testThatWildcardDoesNotMatchZeroChars() throws Exception { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); SynonymInstruction synInstruction = new SynonymInstruction(Arrays.asList(mkTerm( "p1"), mkTerm("$1"))); builder.addRule((Input) LineParser.parseInput("p1*"), new Instructions(Arrays.asList((Instruction) synInstruction))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery("p1"); Query rewritten = (Query) rewriter.rewrite(query, EMPTY_CONTEXT).getUserQuery(); assertThat(rewritten, bq( dmq( term("p1", false) ) )); }
@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()); }
@Test public void testThatBoostQueriesWithMustClauseUseMM100ByDefault() { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); FilterInstruction filterInstruction = new FilterInstruction(makeQuery("a b").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"); Collection<QuerqyQuery<?>> filterQueries = rewriter.rewrite(query, EMPTY_CONTEXT).getFilterQueries(); QuerqyQuery<?> qq = filterQueries.iterator().next(); assertTrue(qq instanceof BooleanQuery); assertThat((BooleanQuery) qq, bq( dmq(must(), term("a", true)), dmq(must(), term("b", true)) ) ); }
@Test public void testThatUpQueriesAreOfTypeQuery() throws Exception { 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"); Collection<BoostQuery> upQueries = rewriter.rewrite(query, EMPTY_CONTEXT).getBoostUpQueries(); for (BoostQuery bq : upQueries) { Assert.assertTrue(bq.getQuery() instanceof Query); } }
@Test public void testThatDeleteIsAppliedToMultiTermWildcardInput() throws Exception { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); Input input = (Input) LineParser.parseInput("ab k*"); DeleteInstruction deleteInstruction = new DeleteInstruction(input.getInputTerms()); builder.addRule(input, new Instructions(Collections.singletonList((Instruction) deleteInstruction))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery("x ab klm"); Query rewritten = (Query) rewriter.rewrite(query, EMPTY_CONTEXT).getUserQuery(); assertThat(rewritten, bq( dmq( term("x") ) )); }
@Test public void testThatDeleteIsAppliedToWildcardInput() throws Exception { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); Input input = (Input) LineParser.parseInput("k*"); DeleteInstruction deleteInstruction = new DeleteInstruction(input.getInputTerms()); builder.addRule(input, new Instructions(Collections.singletonList((Instruction) deleteInstruction))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery("x klm"); Query rewritten = (Query) rewriter.rewrite(query, EMPTY_CONTEXT).getUserQuery(); assertThat(rewritten, bq( dmq( term("x") ) )); }
builder.addRule(input, new Instructions(Collections.singletonList((Instruction) deleteInstruction)));
@Test public void testThatDownQueriesAreOfTypeQuery() throws Exception { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); BoostInstruction boostInstruction = new BoostInstruction(makeQuery("a b$1").getUserQuery(), BoostDirection.DOWN, 0.2f); builder.addRule((Input) LineParser.parseInput("x k*"), new Instructions(Collections.singletonList((Instruction) boostInstruction))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery("x klm y"); Collection<BoostQuery> downQueries = rewriter.rewrite(query, EMPTY_CONTEXT).getBoostDownQueries(); for (BoostQuery bq : downQueries) { Assert.assertTrue(bq.getQuery() instanceof Query); } }