@Override
  public Cursor<T> findAll(Query query, Class clazz) {
    SearchRequestBuilder builder = service.findAll(query, getIndex(), getType(), false);
    SearchHits h = service.executeBuilder(builder);
    if (h != null) {
      return new BlockCursor<T>(clazz, builder, 0, 100);
    }

    return null;
  }
  @Override
  public Cursor<T> findAll() {
    SearchRequestBuilder builder = service.findAllScroll(getIndex(), getType());
    SearchScrollRequestBuilder scroll = service.executeScroll(builder);
    if (builder != null) {
      try {
        return new ScrollCursor<T>(t, scroll);
      } catch (Exception e) {
        logger.log(Level.WARNING, "Failed to create new scroll.", e);
      }
    }

    return null;
  }
 @Override
 public T findById(String id) {
   String s = service.realTimeGet(getIndex(), getType(), id);
   if (s != null) {
     return mapping.get(s, t);
   } else {
     return null;
   }
 }
 @Override
 public OperationStatus write(WriteOperation builder, List<? extends T> t) {
   // TODO: need to gather operation results and return
   OperationStatus status = new OperationStatus();
   if (t.size() == 1) {
     service.index(
         getIndex(),
         getType(),
         mapping.get(t.get(0)),
         AnnotationHelper.getDocumentId(t.get(0), getIdField()));
   } else if (t.size() > 1) {
     List<String> list = new ArrayList<String>();
     for (T o : t) {
       list.add(mapping.get(o));
       // TODO: what do we do with null ids? bail with exception? Report the error with
       // OperationStatus?
     }
     service.bulkIndex(getIndex(), getType(), list.toArray(new String[list.size()]), getIdField());
   }
   status.setSucceeded(true);
   return status;
 }
 @Override
 public OperationStatus write(T... t) {
   // TODO: Need to gather results from index operation
   OperationStatus status = new OperationStatus();
   if (t.length == 1) {
     service.index(
         getIndex(),
         getType(),
         mapping.get(t[0]),
         AnnotationHelper.getDocumentId(t[0], getIdField()));
   } else if (t.length > 1) {
     List<String> list = new ArrayList<String>();
     for (T o : t) {
       list.add(mapping.get(o));
       // TODO: what do we do with null ids? bail with exception? Report the error with
       // OperationStatus?
     }
     service.bulkIndex(getIndex(), getType(), list.toArray(new String[list.size()]), getIdField());
   }
   status.setSucceeded(true);
   return status;
 }
 @Override
 public <T> T find(Query query, Class<T> clazz) {
   String s = service.getSingle(query, getIndex(), getType());
   return mapping.get(s, clazz);
 }
 @Override
 public T find(Query query) {
   String s = service.getSingle(query, getIndex(), getType());
   return mapping.get(s, t);
 }
 @Override
 public long count(Query query) {
   return service.count(query, getIndex(), getType());
 }
 @Override
 public long count() {
   return service.count(getIndex(), getType());
 }
 @Override
 public boolean exists() {
   return service.exists(getType(), getType());
 }
 @Override
 public Cursor<T> findAllById(Class<T> clazz, String... ids) {
   String[] json = service.realTimeMultiGet(getIndex(), getType(), ids);
   return new MultiGetCursor<T>(clazz, json);
 }
 @Override
 public <T> T findById(String id, Class<T> clazz) {
   String s = service.realTimeGet(getIndex(), getType(), id);
   return mapping.get(s, clazz);
 }