Skip to content

Commit 1152e00

Browse files
committed
DATAES-18 : Add Support to specify Index Name and type in Delete Query
1 parent 00ac1e8 commit 1152e00

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,13 @@ public interface ElasticsearchOperations {
201201
*/
202202
<T> void delete(DeleteQuery query, Class<T> clazz);
203203

204+
/**
205+
* Delete all records matching the query
206+
*
207+
* @param query
208+
*/
209+
void delete(DeleteQuery query);
210+
204211
/**
205212
* Deletes an index for given entity
206213
*

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,14 @@ public <T> void delete(DeleteQuery deleteQuery, Class<T> clazz) {
295295
.setQuery(deleteQuery.getQuery()).execute().actionGet();
296296
}
297297

298+
@Override
299+
public void delete(DeleteQuery deleteQuery) {
300+
Assert.notNull(deleteQuery.getIndex(), "No index defined for Query");
301+
Assert.notNull(deleteQuery.getType(), "No type define for Query");
302+
client.prepareDeleteByQuery(deleteQuery.getIndex()).setTypes(deleteQuery.getType())
303+
.setQuery(deleteQuery.getQuery()).execute().actionGet();
304+
}
305+
298306
@Override
299307
public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noFields) {
300308
Assert.notNull(searchQuery.getIndices(), "No index defined for Query");

src/main/java/org/springframework/data/elasticsearch/core/query/DeleteQuery.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,37 @@
1919

2020
/**
2121
* DeleteQuery
22-
*
22+
*
2323
* @author Rizwan Idrees
2424
* @author Mohsin Husen
2525
*/
2626
public class DeleteQuery {
2727

2828
private QueryBuilder query;
29+
private String index;
30+
private String type;
2931

3032
public QueryBuilder getQuery() {
3133
return query;
3234
}
3335

3436
public void setQuery(QueryBuilder query) {
3537
this.query = query;
38+
}
39+
40+
public String getIndex() {
41+
return index;
42+
}
43+
44+
public void setIndex(String index) {
45+
this.index = index;
46+
}
47+
48+
public String getType() {
49+
return type;
50+
}
51+
52+
public void setType(String type) {
53+
this.type = type;
3654
}
3755
}

src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,4 +849,31 @@ public void shouldDeleteSpecifiedTypeFromAnIndex() {
849849
boolean typeExists = elasticsearchTemplate.typeExists("test-index", "test-type");
850850
assertThat(typeExists, is(false));
851851
}
852+
853+
@Test
854+
public void shouldDeleteDocumentBySpecifiedTypeUsingDeleteQuery(){
855+
// given
856+
String documentId = randomNumeric(5);
857+
SampleEntity sampleEntity = new SampleEntity();
858+
sampleEntity.setId(documentId);
859+
sampleEntity.setMessage("some message");
860+
sampleEntity.setVersion(System.currentTimeMillis());
861+
862+
IndexQuery indexQuery = new IndexQuery();
863+
indexQuery.setId(documentId);
864+
indexQuery.setObject(sampleEntity);
865+
866+
elasticsearchTemplate.index(indexQuery);
867+
// when
868+
DeleteQuery deleteQuery = new DeleteQuery();
869+
deleteQuery.setQuery(fieldQuery("id", documentId));
870+
deleteQuery.setIndex("test-index");
871+
deleteQuery.setType("test-type");
872+
elasticsearchTemplate.delete(deleteQuery);
873+
// then
874+
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id", documentId)).build();
875+
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
876+
assertThat(sampleEntities.getTotalElements(), equalTo(0L));
877+
}
878+
852879
}

0 commit comments

Comments
 (0)