View Javadoc
1   package org.wikimedia.search.extra.router;
2   
3   import static org.hamcrest.CoreMatchers.instanceOf;
4   import static org.wikimedia.search.extra.router.AbstractRouterQueryBuilder.ConditionDefinition.gte;
5   
6   import java.io.IOException;
7   
8   import org.apache.lucene.util.LuceneTestCase;
9   import org.elasticsearch.index.query.MatchNoneQueryBuilder;
10  import org.elasticsearch.index.query.MatchPhraseQueryBuilder;
11  import org.elasticsearch.index.query.QueryBuilder;
12  import org.elasticsearch.index.query.QueryBuilders;
13  import org.junit.Test;
14  import org.wikimedia.search.extra.QueryBuilderTestUtils;
15  import org.wikimedia.search.extra.router.AbstractRouterQueryBuilder.Condition;
16  
17  public class TokenCountRouterParserTest extends LuceneTestCase {
18      @Test
19      public void testParseExemple() throws IOException {
20          String json = "{\"token_count_router\": {\n" +
21                  "   \"field\": \"text\",\n" +
22                  "   \"text\": \"input query\",\n" +
23                  "   \"conditions\" : [\n" +
24                  "       {\n" +
25                  "           \"gte\": 2,\n" +
26                  "           \"query\": {\n" +
27                  "               \"match_phrase\": {\n" +
28                  "                   \"text\": \"input query\"\n" +
29                  "               }\n" +
30                  "           }\n" +
31                  "       }\n" +
32                  "   ],\n" +
33                  "   \"fallback\": {\n" +
34                  "       \"match_none\": {}\n" +
35                  "   }\n" +
36                  "}}";
37  
38          QueryBuilder builder = QueryBuilderTestUtils.FULLY_FEATURED.parseQuery(json);
39          assertThat(builder, instanceOf(TokenCountRouterQueryBuilder.class));
40          TokenCountRouterQueryBuilder tok = (TokenCountRouterQueryBuilder) builder;
41          assertEquals("text", tok.field());
42          assertEquals("input query", tok.text());
43          assertNull(tok.analyzer());
44          assertTrue(tok.discountOverlaps());
45          assertEquals(1, tok.conditionStream().count());
46          Condition cond = tok.conditionStream().findFirst().get();
47          assertEquals(gte, cond.definition());
48          assertEquals(2, cond.value());
49          assertThat(cond.query(), instanceOf(MatchPhraseQueryBuilder.class));
50          assertThat(tok.fallback(), instanceOf(MatchNoneQueryBuilder.class));
51  
52          TokenCountRouterQueryBuilder expected = new TokenCountRouterQueryBuilder();
53          expected.field("text");
54          expected.text("input query");
55          expected.condition(gte, 2, QueryBuilders.matchPhraseQuery("text", "input query"));
56          expected.fallback(new MatchNoneQueryBuilder());
57          assertEquals(expected, tok);
58      }
59  }