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 }