package com.github.obourgain.elasticsearch.http.handler.document;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import org.assertj.core.api.Assertions;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.support.QuerySourceBuilder;
import org.elasticsearch.client.Requests;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.lookup.SourceLookup;
import org.junit.Test;
import com.github.obourgain.elasticsearch.http.AbstractTest;
public class DeleteByQueryActionHandlerTest extends AbstractTest {
public static final String OTHER_INDEX = THE_INDEX + "_2";
@Test
public void should_delete_documents() throws IOException, ExecutionException, InterruptedException {
BytesReference source = source().bytes();
index(THE_INDEX, THE_TYPE, THE_ID, SourceLookup.sourceAsMap(source));
index(THE_INDEX, THE_TYPE, THE_ID + "_2", SourceLookup.sourceAsMap(source));
refresh();
Assertions.assertThat(get(THE_INDEX, THE_TYPE, THE_ID).isExists()).isTrue();
httpClient.deleteByQuery(Requests.deleteByQueryRequest(THE_INDEX)
.source(new QuerySourceBuilder().setQuery(QueryBuilders.matchAllQuery()))
).get();
Assertions.assertThat(getFromPrimary(THE_INDEX, THE_TYPE, THE_ID).isExists()).isFalse();
Assertions.assertThat(getFromPrimary(THE_INDEX, THE_TYPE, THE_ID + "_2").isExists()).isFalse();
}
@Test
public void should_delete_documents_in_multiple_indices() throws IOException, ExecutionException, InterruptedException {
BytesReference source = source().bytes();
IndexRequest request = Requests.indexRequest().index(THE_INDEX)
.type(THE_TYPE)
.id(THE_ID)
.source(source.toBytes());
transportClient.index(request).actionGet();
request.index(OTHER_INDEX);
transportClient.index(request).actionGet();
refresh();
httpClient.deleteByQuery(Requests.deleteByQueryRequest(THE_INDEX, THE_INDEX + "_2")
.source(new QuerySourceBuilder().setQuery(QueryBuilders.matchAllQuery()))).get();
Assertions.assertThat(getFromPrimary(THE_INDEX, THE_TYPE, THE_ID).isExists()).isFalse();
Assertions.assertThat(getFromPrimary(OTHER_INDEX, THE_TYPE, THE_ID).isExists()).isFalse();
}
private GetResponse getFromPrimary(String index, String type, String id) {
// use primary as per the doc, because delete by query uses quorum as default consistency
return client().prepareGet(index, type, id).setPreference("_primary").execute().actionGet();
}
}