diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java index bb8c9c9fc..be501ef30 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java @@ -203,13 +203,21 @@ public interface ElasticsearchOperations { /** * Deletes an index for given entity - * + * * @param clazz * @param * @return */ boolean deleteIndex(Class clazz); + /** + * Deletes a type in an index + * + * @param index + * @param type + */ + void deleteType(String index, String type); + /** * check if index is exists * @@ -219,6 +227,15 @@ public interface ElasticsearchOperations { */ boolean indexExists(Class clazz); + /** + * check if type is exists in an index + * + * @param index + * @param type + * @return + */ + boolean typeExists(String index, String type); + /** * refresh the index * diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index 3b8d57cb8..74cb3be86 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -19,6 +19,7 @@ import org.apache.commons.collections.CollectionUtils; import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.ObjectMapper; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; +import org.elasticsearch.action.admin.indices.mapping.delete.DeleteMappingRequest; import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder; import org.elasticsearch.action.bulk.BulkItemResponse; import org.elasticsearch.action.bulk.BulkRequestBuilder; @@ -252,6 +253,12 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { return indexExists(getPersistentEntityFor(clazz).getIndexName()); } + @Override + public boolean typeExists(String index, String type) { + return client.admin().cluster().prepareState().execute().actionGet() + .getState().metaData().index(index).mappings().containsKey(type); + } + @Override public boolean deleteIndex(Class clazz) { String indexName = getPersistentEntityFor(clazz).getIndexName(); @@ -261,6 +268,15 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { return false; } + @Override + public void deleteType(String index, String type){ + Map mappings = client.admin().cluster().prepareState().execute().actionGet() + .getState().metaData().index(index).mappings(); + if (mappings.containsKey(type)) { + client.admin().indices().deleteMapping(new DeleteMappingRequest(index).type(type)).actionGet(); + } + } + @Override public String delete(String indexName, String type, String id) { return client.prepareDelete(indexName, type, id).execute().actionGet().getId(); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java index 7bdad91dd..4603266a7 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java @@ -42,9 +42,7 @@ import java.util.List; import static org.apache.commons.lang.RandomStringUtils.randomNumeric; import static org.elasticsearch.index.query.FilterBuilders.boolFilter; import static org.elasticsearch.index.query.FilterBuilders.termFilter; -import static org.elasticsearch.index.query.QueryBuilders.fieldQuery; -import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; -import static org.elasticsearch.index.query.QueryBuilders.termQuery; +import static org.elasticsearch.index.query.QueryBuilders.*; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; @@ -829,4 +827,26 @@ public class ElasticsearchTemplateTests { } + @Test + public void shouldDeleteSpecifiedTypeFromAnIndex() { + // given + String documentId = randomNumeric(5); + SampleEntity sampleEntity = new SampleEntity(); + sampleEntity.setId(documentId); + sampleEntity.setMessage("some message"); + sampleEntity.setVersion(System.currentTimeMillis()); + + IndexQuery indexQuery = new IndexQuery(); + indexQuery.setId(documentId); + indexQuery.setObject(sampleEntity); + + elasticsearchTemplate.index(indexQuery); + + // when + elasticsearchTemplate.deleteType("test-index","test-type"); + + //then + boolean typeExists = elasticsearchTemplate.typeExists("test-index", "test-type"); + assertThat(typeExists, is(false)); + } }