public int getNbrInstance() {
   String query =
       "{\n"
           + "   \"query\": {\n"
           + "       \"match_all\": {}\n"
           + "   },\n"
           + "   \"size\": "
           + Integer.MAX_VALUE
           + "\n"
           + "}";
   String elasticType = "test-ES";
   SearchResult searchResult = performSearchOnType(query, elasticType);
   System.out.println(elasticType);
   JsonObject jsonObject = searchResult.getJsonObject();
   JsonArray jsonHits = jsonObject.get("hits").getAsJsonObject().get("hits").getAsJsonArray();
   System.out.println();
   return jsonHits.size();
 }
  private <T> List<GeolocResult<T>> find(
      double lat, double lon, int size, Class<T> clazz, String elasticType) {
    if (size == 0) {
      size = 10;
    }

    String query =
        "{\n"
            + "  \"query\": {\n"
            + "    \"filtered\" : {\n"
            + "        \"filter\" : {\n"
            + "            \"geo_distance\" : {\n"
            + "                \"distance\" : \"200km\",\n"
            + "                \"location\" : {\n"
            + "                    \"lat\" : "
            + lat
            + ",\n"
            + "                    \"lon\" : "
            + lon
            + "\n"
            + "                }\n"
            + "            }\n"
            + "        }\n"
            + "    }\n"
            + "  },\n"
            + "  \"size\" : "
            + size
            + ",\n"
            + "  \"sort\": [\n"
            + "    {\n"
            + "      \"_geo_distance\": {\n"
            + "        \"location\": { \n"
            + "            \"lat\" : "
            + lat
            + ",\n"
            + "            \"lon\" : "
            + lon
            + "\n"
            + "        },\n"
            + "        \"order\":         \"asc\",\n"
            + "        \"unit\":          \"km\", \n"
            + "        \"distance_type\": \"plane\" \n"
            + "      }\n"
            + "    }\n"
            + "  ]\n"
            + "}";

    SearchResult searchResult = performSearchOnType(query, elasticType);

    JsonObject jsonObject = searchResult.getJsonObject();
    JsonArray jsonHits = jsonObject.get("hits").getAsJsonObject().get("hits").getAsJsonArray();

    Gson gson = new Gson();

    return StreamSupport.stream(jsonHits.spliterator(), false)
        .map(
            jsonElement -> {
              JsonObject hit = jsonElement.getAsJsonObject();
              double distance = hit.get("sort").getAsDouble();
              T result = gson.fromJson(hit.get("_source").getAsJsonObject(), clazz);

              return new GeolocResult<T>(result, (int) (distance * 1000));
            })
        .collect(Collectors.toList());
  }