@Before
  public void init() throws Exception {
    createIndex("idx");
    IndexRequestBuilder[] lowCardBuilders = new IndexRequestBuilder[5]; // TODO randomize the size?
    for (int i = 0; i < lowCardBuilders.length; i++) {
      lowCardBuilders[i] =
          client()
              .prepareIndex("idx", "type")
              .setSource(
                  jsonBuilder()
                      .startObject()
                      .field(SINGLE_VALUED_FIELD_NAME, "val" + i)
                      .field("i", i)
                      .field("tag", i < lowCardBuilders.length / 2 + 1 ? "more" : "less")
                      .startArray(MULTI_VALUED_FIELD_NAME)
                      .value("val" + i)
                      .value("val" + (i + 1))
                      .endArray()
                      .endObject());
    }
    indexRandom(true, lowCardBuilders);
    IndexRequestBuilder[] highCardBuilders =
        new IndexRequestBuilder[100]; // TODO randomize the size?

    for (int i = 0; i < highCardBuilders.length; i++) {
      highCardBuilders[i] =
          client()
              .prepareIndex("idx", "high_card_type")
              .setSource(
                  jsonBuilder()
                      .startObject()
                      .field(SINGLE_VALUED_FIELD_NAME, "val" + Strings.padStart(i + "", 3, '0'))
                      .startArray(MULTI_VALUED_FIELD_NAME)
                      .value("val" + Strings.padStart(i + "", 3, '0'))
                      .value("val" + Strings.padStart((i + 1) + "", 3, '0'))
                      .endArray()
                      .endObject());
    }
    indexRandom(true, highCardBuilders);
    createIndex("idx_unmapped");
    ensureSearchable();
  }