View Javadoc
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  }