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); <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 * Deletes an index for given entity
* *

View File

@ -295,6 +295,14 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
.setQuery(deleteQuery.getQuery()).execute().actionGet(); .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 @Override
public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noFields) { public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noFields) {
Assert.notNull(searchQuery.getIndices(), "No index defined for Query"); Assert.notNull(searchQuery.getIndices(), "No index defined for Query");

View File

@ -19,13 +19,15 @@ import org.elasticsearch.index.query.QueryBuilder;
/** /**
* DeleteQuery * DeleteQuery
* *
* @author Rizwan Idrees * @author Rizwan Idrees
* @author Mohsin Husen * @author Mohsin Husen
*/ */
public class DeleteQuery { public class DeleteQuery {
private QueryBuilder query; private QueryBuilder query;
private String index;
private String type;
public QueryBuilder getQuery() { public QueryBuilder getQuery() {
return query; return query;
@ -33,5 +35,21 @@ public class DeleteQuery {
public void setQuery(QueryBuilder query) { public void setQuery(QueryBuilder query) {
this.query = 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"); boolean typeExists = elasticsearchTemplate.typeExists("test-index", "test-type");
assertThat(typeExists, is(false)); 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));
}
} }