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 be501ef30..8ef4700db 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java @@ -201,6 +201,13 @@ public interface ElasticsearchOperations { */ void delete(DeleteQuery query, Class clazz); + /** + * Delete all records matching the query + * + * @param query + */ + void delete(DeleteQuery query); + /** * Deletes an index for given entity * 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 74cb3be86..544c92c5e 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -295,6 +295,14 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { .setQuery(deleteQuery.getQuery()).execute().actionGet(); } + @Override + public void delete(DeleteQuery deleteQuery) { + Assert.notNull(deleteQuery.getIndex(), "No index defined for Query"); + Assert.notNull(deleteQuery.getType(), "No type define for Query"); + client.prepareDeleteByQuery(deleteQuery.getIndex()).setTypes(deleteQuery.getType()) + .setQuery(deleteQuery.getQuery()).execute().actionGet(); + } + @Override public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noFields) { Assert.notNull(searchQuery.getIndices(), "No index defined for Query"); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/DeleteQuery.java b/src/main/java/org/springframework/data/elasticsearch/core/query/DeleteQuery.java index 4578c834c..b02c773fc 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/DeleteQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/DeleteQuery.java @@ -19,13 +19,15 @@ import org.elasticsearch.index.query.QueryBuilder; /** * DeleteQuery - * + * * @author Rizwan Idrees * @author Mohsin Husen */ public class DeleteQuery { private QueryBuilder query; + private String index; + private String type; public QueryBuilder getQuery() { return query; @@ -33,5 +35,21 @@ public class DeleteQuery { public void setQuery(QueryBuilder query) { this.query = query; + } + + public String getIndex() { + return index; + } + + public void setIndex(String index) { + this.index = index; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; } } 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 4603266a7..8ade5078d 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java @@ -849,4 +849,31 @@ public class ElasticsearchTemplateTests { boolean typeExists = elasticsearchTemplate.typeExists("test-index", "test-type"); assertThat(typeExists, is(false)); } + + @Test + public void shouldDeleteDocumentBySpecifiedTypeUsingDeleteQuery(){ + // 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 + DeleteQuery deleteQuery = new DeleteQuery(); + deleteQuery.setQuery(fieldQuery("id", documentId)); + deleteQuery.setIndex("test-index"); + deleteQuery.setType("test-type"); + elasticsearchTemplate.delete(deleteQuery); + // then + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id", documentId)).build(); + Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class); + assertThat(sampleEntities.getTotalElements(), equalTo(0L)); + } + }