@Test public void testInputWithWildcard() { assertTrue("parseInput must not allow wildcard in the middle", LineParser.parseInput("abc* def ghij*") instanceof ValidationError); }
return new ValidationError("Empty input"); return parseInput(line.substring(0, line.length() - 2));
@Test public void testThatWildcardCannotBeFollowedByRightBoundary() throws Exception { Object parseResult = LineParser.parseInput("a" + LineParser.WILDCARD + LineParser.BOUNDARY); assertEquals("Wildcard should not be allowed before right boundary", new ValidationError(LineParser.WILDCARD + " cannot be combined with right boundary"), parseResult); }
@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 testThatCaseIsPreservedInDecorateInstruction() throws Exception { Input input = (Input) LineParser.parseInput("in"); assertEquals(new DecorateInstruction("Some Deco"), LineParser.parse("DECORATE: Some Deco", input, null)); }
@Test public void testThatBoundariesAreParsedInOtherwiseEmptyInput() throws Exception { Object parseResult = LineParser.parseInput(LineParser.BOUNDARY + "" + LineParser.BOUNDARY); assertTrue(parseResult instanceof Input); Input input = (Input) parseResult; assertTrue(input.requiresLeftBoundary()); assertTrue(input.requiresRightBoundary()); }
@Test public void testThatWildcardCanBeCombinedWithLeftBoundary() throws Exception { Object parseResult = LineParser.parseInput(LineParser.BOUNDARY + "a" + LineParser.WILDCARD); assertTrue(parseResult instanceof Input); Input input = (Input) parseResult; assertTrue(input.requiresLeftBoundary()); assertFalse(input.requiresRightBoundary()); }
@Test public void testThatBoundariesAreParsedInInput() throws Exception { Object parseResult = LineParser.parseInput(LineParser.BOUNDARY + "a" + LineParser.BOUNDARY); assertTrue(parseResult instanceof Input); Input input = (Input) parseResult; assertTrue(input.requiresLeftBoundary()); assertTrue(input.requiresRightBoundary()); }
@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 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") ) )); }
Input input = (Input) LineParser.parseInput("k*");
@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); } }
@Test public void testThatPlaceHolderGetsReplaced() 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(); assertThat(downQueries, contains( boostQ( bq( dmq(must(), term("a", true)), dmq(must(), term("blm", true)) ), 0.2f ))); }
@Test public void testThatPlaceHolderGetsReplacedAsASeperateToken() throws Exception { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); BoostInstruction boostInstruction = new BoostInstruction(makeQuery("a $1").getUserQuery(), BoostDirection.DOWN, 0.3f); 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(); assertThat(downQueries, contains( boostQ( bq( dmq(must(), term("a", true)), dmq(must(), term("lm", true)) ), 0.3f ))); }
builder.addRule((Input) LineParser.parseInput("k*"), new Instructions(Collections.singletonList((Instruction) boostInstruction)));
@Test public void testThatPrefixIsMatchedAndPlaceHolderGetsReplaced() 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("p1xyz"); Query rewritten = (Query) rewriter.rewrite(query, EMPTY_CONTEXT).getUserQuery(); assertThat(rewritten, bq( dmq( term("p1xyz", false), bq( dmq(must(), term("p1", true)), dmq(must(), term("xyz", true)) ) ) )); }
@Test public void testThatPrefixIsMatchedAndPlaceHolderGetsReplacedForLongerTerms() throws Exception { RulesCollectionBuilder builder = new TrieMapRulesCollectionBuilder(false); SynonymInstruction synInstruction = new SynonymInstruction(Arrays.asList(mkTerm( "bus"), mkTerm("$1"))); builder.addRule((Input) LineParser.parseInput("bus*"), new Instructions(Arrays.asList((Instruction) synInstruction))); RulesCollection rules = builder.build(); CommonRulesRewriter rewriter = new CommonRulesRewriter(rules); ExpandedQuery query = makeQuery("busstop"); Query rewritten = (Query) rewriter.rewrite(query, EMPTY_CONTEXT).getUserQuery(); assertThat(rewritten, bq( dmq( term("busstop", false), bq( dmq(must(), term("bus", true)), dmq(must(), term("stop", true)) ) ) )); }
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)));
builder.addRule((Input) LineParser.parseInput("p1 p2*"), new Instructions(Arrays.asList((Instruction) synInstruction)));