1 package org.wikimedia.search.extra.router; 2 3 import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; 4 import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; 5 import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertNoSearchHits; 6 import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchHits; 7 8 import java.io.IOException; 9 10 import org.elasticsearch.action.search.SearchResponse; 11 import org.elasticsearch.index.query.QueryBuilders; 12 import org.junit.Test; 13 import org.wikimedia.search.extra.AbstractPluginIntegrationTest; 14 15 public class TokenCountRouterQueryIntegrationTest extends AbstractPluginIntegrationTest { 16 private void init() throws IOException { 17 assertAcked(prepareCreate("test") 18 .addMapping( 19 "type1", 20 jsonBuilder().startObject().startObject("type1").startObject("properties") 21 .startObject("content") 22 .field("type", "text") 23 .field("store", false) 24 .field("analyzer", "standard") 25 .endObject().endObject().endObject().endObject()) 26 .setSettings(jsonBuilder().startObject().startObject("index") 27 .field("number_of_shards", 1) 28 .startObject("analysis").startObject("analyzer") 29 .startObject("emit_dups") 30 .field("tokenizer", "standard") 31 .array("filter", "keyword_repeat") 32 .endObject() 33 .endObject().endObject() 34 .endObject().endObject()).get()); 35 36 client().prepareIndex("test", "type1", "1").setSource("content", "Haste makes waste").get(); 37 client().prepareIndex("test", "type1", "2").setSource("content", "A stitch in time saves nine").get(); 38 client().prepareIndex("test", "type1", "3").setSource("content", "Ignorance is bliss").get(); 39 client().prepareIndex("test", "type1", "4").setSource("content", "Paste makes waste").get(); 40 client().prepareIndex("test", "type1", "5").setSource("content", "A stitch in time saves nine essay").get(); 41 client().prepareIndex("test", "type1", "6").setSource("content", "Ignorance is strength").get(); 42 client().prepareIndex("test", "type1", "7").setSource().get(); 43 refresh(); 44 } 45 46 @Test 47 public void test() throws IOException { 48 init(); 49 TokenCountRouterQueryBuilder builder = new TokenCountRouterQueryBuilder(); 50 builder.field("content") 51 .condition(AbstractRouterQueryBuilder.ConditionDefinition.gt, 4, QueryBuilders.termQuery("content", "absent")) 52 .condition(AbstractRouterQueryBuilder.ConditionDefinition.gte, 2, QueryBuilders.termQuery("content", "haste")) 53 .fallback(QueryBuilders.termQuery("content", "strength")); 54 SearchResponse sr; 55 builder.text("one and two and three"); 56 sr = client().prepareSearch("test").setQuery(builder).get(); 57 assertNoSearchHits(sr); 58 59 builder.text("one and two and"); 60 sr = client().prepareSearch("test").setQuery(builder).get(); 61 assertSearchHits(sr, "1"); 62 63 builder.text("one and"); 64 sr = client().prepareSearch("test").setQuery(builder).get(); 65 assertSearchHits(sr, "1"); 66 67 builder.text("one"); 68 sr = client().prepareSearch("test").setQuery(builder).get(); 69 assertSearchHits(sr, "6"); 70 71 builder.analyzer("english"); 72 builder.text("one and two and three"); 73 sr = client().prepareSearch("test").setQuery(builder).get(); 74 assertSearchHits(sr, "1"); 75 76 builder.text("one and"); 77 sr = client().prepareSearch("test").setQuery(builder).get(); 78 assertSearchHits(sr, "6"); 79 80 builder.analyzer("emit_dups"); 81 builder.discountOverlaps(false); 82 builder.text("one and two"); 83 sr = client().prepareSearch("test").setQuery(builder).get(); 84 assertNoSearchHits(sr); 85 86 builder.discountOverlaps(true); 87 builder.text("one and two"); 88 sr = client().prepareSearch("test").setQuery(builder).get(); 89 assertSearchHits(sr, "1"); 90 } 91 }