DATAES-18 : Add Support to specify Index Name and type in Delete Query

This commit is contained in:
Mohsin Husen 2013-08-09 14:45:32 +01:00
parent 00ac1e8c95
commit 1152e00a31
4 changed files with 61 additions and 1 deletions

View File

@ -201,6 +201,13 @@ public interface ElasticsearchOperations {
*/
<T> void delete(DeleteQuery query, Class<T> clazz);
/**
* Delete all records matching the query
*
* @param query
*/
void delete(DeleteQuery query);
/**
* Deletes an index for given entity
*

View File

@ -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");

View File

@ -26,6 +26,8 @@ import org.elasticsearch.index.query.QueryBuilder;
public class DeleteQuery {
private QueryBuilder query;
private String index;
private String type;
public QueryBuilder getQuery() {
return query;
@ -34,4 +36,20 @@ 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;
}
}

View File

@ -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<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
assertThat(sampleEntities.getTotalElements(), equalTo(0L));
}
}