DATAES-547 - Polishing.

Add test and directly use SearchHit to pass on the index name.
Fix minor flaw in Exception translation for non existing indices along the way.

Original Pull Request: #257
This commit is contained in:
Christoph Strobl
2019-04-09 13:58:52 +02:00
parent 082988955b
commit 16bf8450f0
6 changed files with 177 additions and 67 deletions

View File

@@ -66,12 +66,14 @@ import org.springframework.data.elasticsearch.entities.GTEVersionEntity;
import org.springframework.data.elasticsearch.entities.HetroEntity1;
import org.springframework.data.elasticsearch.entities.HetroEntity2;
import org.springframework.data.elasticsearch.entities.SampleEntity;
import org.springframework.data.elasticsearch.entities.SampleEntityUUIDKeyed;
import org.springframework.data.elasticsearch.entities.SampleMappingEntity;
import org.springframework.data.elasticsearch.entities.UseServerConfigurationEntity;
import org.springframework.data.util.CloseableIterator;
/**
* Base for testing rest/transport templates
*
* @author Rizwan Idrees
* @author Mohsin Husen
* @author Franck Marchand
@@ -101,9 +103,15 @@ public class ElasticsearchTemplateTests {
@Before
public void before() {
elasticsearchTemplate.deleteIndex(SampleEntity.class);
elasticsearchTemplate.createIndex(SampleEntity.class);
elasticsearchTemplate.putMapping(SampleEntity.class);
elasticsearchTemplate.deleteIndex(SampleEntityUUIDKeyed.class);
elasticsearchTemplate.createIndex(SampleEntityUUIDKeyed.class);
elasticsearchTemplate.putMapping(SampleEntityUUIDKeyed.class);
elasticsearchTemplate.deleteIndex(INDEX_1_NAME);
elasticsearchTemplate.deleteIndex(INDEX_2_NAME);
elasticsearchTemplate.deleteIndex(UseServerConfigurationEntity.class);
@@ -405,6 +413,86 @@ public class ElasticsearchTemplateTests {
assertThat(sampleEntities.getTotalElements(), equalTo(0L));
}
@Test // DATAES-547
public void shouldDeleteAcrossIndex() {
// given
SampleEntity sampleEntity = SampleEntity.builder() //
.message("foo") //
.version(System.currentTimeMillis()) //
.build();
IndexQuery idxQuery1 = new IndexQueryBuilder().withIndexName(INDEX_1_NAME).withId(randomNumeric(5))
.withObject(sampleEntity).build();
elasticsearchTemplate.index(idxQuery1);
elasticsearchTemplate.refresh(INDEX_1_NAME);
IndexQuery idxQuery2 = new IndexQueryBuilder().withIndexName(INDEX_2_NAME).withId(randomNumeric(5))
.withObject(sampleEntity).build();
elasticsearchTemplate.index(idxQuery2);
elasticsearchTemplate.refresh(INDEX_2_NAME);
// when
DeleteQuery deleteQuery = new DeleteQuery();
deleteQuery.setQuery(termQuery("message", "foo"));
deleteQuery.setType("test-type");
deleteQuery.setIndex("test-index-*");
elasticsearchTemplate.delete(deleteQuery);
elasticsearchTemplate.refresh(INDEX_1_NAME);
elasticsearchTemplate.refresh(INDEX_2_NAME);
// then
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("message", "foo"))
.withIndices(INDEX_1_NAME, INDEX_2_NAME) //
.build();
assertThat(elasticsearchTemplate.count(searchQuery), equalTo(0L));
}
@Test // DATAES-547
public void shouldDeleteAcrossIndexWhenNoMatchingDataPresent() {
// given
SampleEntity sampleEntity = SampleEntity.builder() //
.message("positive") //
.version(System.currentTimeMillis()) //
.build();
IndexQuery idxQuery1 = new IndexQueryBuilder().withIndexName(INDEX_1_NAME).withId(randomNumeric(5))
.withObject(sampleEntity).build();
elasticsearchTemplate.index(idxQuery1);
elasticsearchTemplate.refresh(INDEX_1_NAME);
IndexQuery idxQuery2 = new IndexQueryBuilder().withIndexName(INDEX_2_NAME).withId(randomNumeric(5))
.withObject(sampleEntity).build();
elasticsearchTemplate.index(idxQuery2);
elasticsearchTemplate.refresh(INDEX_2_NAME);
// when
DeleteQuery deleteQuery = new DeleteQuery();
deleteQuery.setQuery(termQuery("message", "negative"));
deleteQuery.setType("test-type");
deleteQuery.setIndex("test-index-*");
elasticsearchTemplate.delete(deleteQuery);
elasticsearchTemplate.refresh(INDEX_1_NAME);
elasticsearchTemplate.refresh(INDEX_2_NAME);
// then
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("message", "positive"))
.withIndices(INDEX_1_NAME, INDEX_2_NAME) //
.build();
assertThat(elasticsearchTemplate.count(searchQuery), equalTo(2L));
}
@Test
public void shouldFilterSearchResultsForGivenFilter() {
// given

View File

@@ -52,6 +52,8 @@ import org.springframework.data.elasticsearch.core.query.Criteria;
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.data.elasticsearch.core.query.StringQuery;
import org.springframework.data.elasticsearch.entities.SampleEntity;
import org.springframework.test.context.ContextConfiguration;
@@ -519,6 +521,62 @@ public class ReactiveElasticsearchTemplateTests {
.verifyComplete();
}
@Test // DATAES-547
@ElasticsearchVersion(asOf = "6.5.0")
public void shouldDeleteAcrossIndex() {
String indexPrefix = "rx-template-test-index";
String thisIndex = indexPrefix + "-this";
String thatIndex = indexPrefix + "-that";
template.save(randomEntity("test"), thisIndex) //
.then(template.save(randomEntity("test"), thatIndex)) //
.then() //
.as(StepVerifier::create)//
.verifyComplete();
restTemplate.refresh(thisIndex);
restTemplate.refresh(thatIndex);
SearchQuery searchQuery = new NativeSearchQueryBuilder() //
.withQuery(termQuery("message", "test")) //
.withIndices(indexPrefix + "*") //
.build();
template.deleteBy(searchQuery, SampleEntity.class) //
.as(StepVerifier::create) //
.expectNext(2L) //
.verifyComplete();
}
@Test // DATAES-547
@ElasticsearchVersion(asOf = "6.5.0")
public void shouldDeleteAcrossIndexWhenNoMatchingDataPresent() {
String indexPrefix = "rx-template-test-index";
String thisIndex = indexPrefix + "-this";
String thatIndex = indexPrefix + "-that";
template.save(randomEntity("positive"), thisIndex) //
.then(template.save(randomEntity("positive"), thatIndex)) //
.then() //
.as(StepVerifier::create)//
.verifyComplete();
restTemplate.refresh(thisIndex);
restTemplate.refresh(thatIndex);
SearchQuery searchQuery = new NativeSearchQueryBuilder() //
.withQuery(termQuery("message", "negative")) //
.withIndices(indexPrefix + "*") //
.build();
template.deleteBy(searchQuery, SampleEntity.class) //
.as(StepVerifier::create) //
.expectNext(0L) //
.verifyComplete();
}
@Test // DATAES-504
@ElasticsearchVersion(asOf = "6.5.0")
public void deleteByQueryShouldReturnNumberOfDeletedDocuments() {