public final void deleteModelById(final ModelIdT id, final Logger logger, final Marker logMarker)
     throws IoExceptionT, NoSuchModelExceptionT {
   logger.debug(logMarker, "deleting model {} from index {}", id, indexName);
   try {
     final DeleteResponse response =
         client.prepareDelete(indexName, documentType, id.toString()).execute().actionGet();
     if (!response.isFound()) {
       throw exceptionFactory.newNoSuchModelException(id);
     }
   } catch (final ElasticsearchException e) {
     throw exceptionFactory.newIoException(
         e, String.format("error deleting model %s from index %s", id, indexName));
   }
 }
 public final Map<String, GetField> getModelFields(
     final ModelIdT id, final Logger logger, final Marker logMarker, final String... fieldNames)
     throws InvalidModelException, IoExceptionT, NoSuchModelExceptionT {
   logger.debug(logMarker, "getting model {} from index {}", id, indexName);
   try {
     final GetResponse response =
         client
             .prepareGet(indexName, documentType, id.toString())
             .setFields(fieldNames)
             .execute()
             .actionGet();
     if (!response.isExists()) {
       throw exceptionFactory.newNoSuchModelException(id);
     }
     return response.getFields();
   } catch (final IndexNotFoundException e) {
     logger.warn(logMarker, "tried to get model {} from missing index {}", id, indexName);
     throw exceptionFactory.newNoSuchModelException(id);
   } catch (final ElasticsearchException e) {
     throw exceptionFactory.newIoException(
         e, String.format("error getting model %s from index %s", id, indexName));
   }
 }
 public final ModelT getModelById(
     final ModelIdT id,
     final Logger logger,
     final Marker logMarker,
     final ModelFactory<ModelEntryT> modelFactory)
     throws InvalidModelException, IoExceptionT, NoSuchModelExceptionT {
   logger.debug(logMarker, "getting model {} from index {}", id, indexName);
   try {
     final GetResponse response =
         client.prepareGet(indexName, documentType, id.toString()).execute().actionGet();
     if (!response.isExists()) {
       throw exceptionFactory.newNoSuchModelException(id);
     }
     return modelFactory
         .createModelEntry(response.getId(), response.getSourceAsBytesRef())
         .getModel();
   } catch (final IndexNotFoundException e) {
     logger.warn(logMarker, "tried to get model {} from missing index {}", id, indexName);
     throw exceptionFactory.newNoSuchModelException(id);
   } catch (final ElasticsearchException e) {
     throw exceptionFactory.newIoException(
         e, String.format("error getting model %s from index %s", id, indexName));
   }
 }