Skip to content

Commit

Permalink
DATAES-595 - Support preference for ReactiveElasticSearchTemplate and…
Browse files Browse the repository at this point in the history
… Junit improvement.

Original pull request: #288.
  • Loading branch information
fazaza committed Jun 20, 2019
1 parent eccd082 commit 45fec5b
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 10 deletions.
Expand Up @@ -138,7 +138,7 @@
* @author Lorenzo Spinelli
* @author Dmitriy Yakovlev
* @author Roman Puchkovskiy
* @author Azaza Farid
* @author Farid Azaza
*/
public class ElasticsearchRestTemplate
implements ElasticsearchOperations, EsClient<RestHighLevelClient>, ApplicationContextAware {
Expand Down
Expand Up @@ -121,7 +121,7 @@
* @author Christoph Strobl
* @author Dmitriy Yakovlev
* @author Peter-Josef Meisch
* @author Azaza Farid
* @author Farid Azaza
*/
public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient<Client>, ApplicationContextAware {

Expand Down
Expand Up @@ -76,6 +76,7 @@
/**
* @author Christoph Strobl
* @author Mark Paluch
* @author Farid Azaza
* @since 3.2
*/
public class ReactiveElasticsearchTemplate implements ReactiveElasticsearchOperations {
Expand Down Expand Up @@ -273,6 +274,10 @@ private Flux<SearchHit> doFind(Query query, ElasticsearchPersistentEntity<?> ent
request.indicesOptions(query.getIndicesOptions());
}

if (query.getPreference() != null) {
request.preference(query.getPreference());
}

Pageable pageable = query.getPageable();

if (pageable.isPaged()) {
Expand Down
Expand Up @@ -35,7 +35,7 @@
* @author Mark Paluch
* @author Alen Turkovic
* @author Sascha Woo
* @author Azaza Farid
* @author Farid Azaza
*/
abstract class AbstractQuery implements Query {

Expand Down
Expand Up @@ -38,7 +38,7 @@
* @author Alen Turkovic
* @author Sascha Woo
* @author Jean-Baptiste Nizet
* @author Azaza Farid
* @author Farid Azaza
*/
public class NativeSearchQueryBuilder {

Expand Down
Expand Up @@ -35,7 +35,7 @@
* @author Alen Turkovic
* @author Sascha Woo
* @author Christoph Strobl
* @author Azaza Farid
* @author Farid Azaza
*/
public interface Query {

Expand Down
Expand Up @@ -106,7 +106,7 @@
* @author Ivan Greene
* @author Dmitriy Yakovlev
* @author Peter-Josef Meisch
* @author Azaza Farid
* @author Farid Azaza
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:elasticsearch-template-test.xml")
Expand Down Expand Up @@ -331,7 +331,7 @@ public void shouldReturnPageForGivenSearchQuery() {
assertThat(sampleEntities.getTotalElements()).isGreaterThanOrEqualTo(1);
}

@Test
@Test // DATAES-595
public void shouldReturnPageUsingLocalPreferenceForGivenSearchQuery() {

// given
Expand All @@ -344,17 +344,41 @@ public void shouldReturnPageUsingLocalPreferenceForGivenSearchQuery() {
elasticsearchTemplate.index(indexQuery);
elasticsearchTemplate.refresh(SampleEntity.class);

SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withPreference("_local")
.build();
SearchQuery searchQueryWithValidPreference = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
.withPreference("_local").build();

// when
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQueryWithValidPreference,
SampleEntity.class);

// then
assertThat(sampleEntities).isNotNull();
assertThat(sampleEntities.getTotalElements()).isGreaterThanOrEqualTo(1);
}

@Test(expected = Exception.class) // DATAES-595
public void shouldThrowExceptionWhenInvalidPreferenceForSearchQuery() {

// given
String documentId = randomNumeric(5);
SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
.version(System.currentTimeMillis()).build();

IndexQuery indexQuery = getIndexQuery(sampleEntity);

elasticsearchTemplate.index(indexQuery);
elasticsearchTemplate.refresh(SampleEntity.class);

SearchQuery searchQueryWithInvalidPreference = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
.withPreference("_only_nodes:oops").build();

// when
elasticsearchTemplate.queryForPage(searchQueryWithInvalidPreference, SampleEntity.class);

// then Throw IllegalArgumentException in case of ElasticsearchTemplate and ElasticsearchStatusException in case of
// ElasticsearchRestTemplate
}

@Test // DATAES-422 - Add support for IndicesOptions in search queries
public void shouldPassIndicesOptionsForGivenSearchQuery() {

Expand Down
Expand Up @@ -39,6 +39,7 @@
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import org.elasticsearch.ElasticsearchStatusException;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
Expand Down Expand Up @@ -75,6 +76,7 @@
* @author Christoph Strobl
* @author Mark Paluch
* @author Peter-Josef Meisch
* @author Farid Azaza
* @currentRead Golden Fool - Robin Hobb
*/
@RunWith(SpringRunner.class)
Expand Down Expand Up @@ -389,6 +391,43 @@ public void shouldReturnListForGivenCriteria() {
.verifyComplete();
}

@Test // DATAES-595
public void shouldReturnListUsingLocalPreferenceForGivenCriteria() {

SampleEntity sampleEntity1 = randomEntity("test message");
SampleEntity sampleEntity2 = randomEntity("test test");
SampleEntity sampleEntity3 = randomEntity("some message");

index(sampleEntity1, sampleEntity2, sampleEntity3);

CriteriaQuery queryWithValidPreference = new CriteriaQuery(
new Criteria("message").contains("some").and("message").contains("message"));
queryWithValidPreference.setPreference("_local");

template.find(queryWithValidPreference, SampleEntity.class) //
.as(StepVerifier::create) //
.expectNext(sampleEntity3) //
.verifyComplete();
}

@Test // DATAES-595
public void shouldThrowElasticsearchStatusExceptionWhenInvalidPreferenceForGivenCriteria() {

SampleEntity sampleEntity1 = randomEntity("test message");
SampleEntity sampleEntity2 = randomEntity("test test");
SampleEntity sampleEntity3 = randomEntity("some message");

index(sampleEntity1, sampleEntity2, sampleEntity3);

CriteriaQuery queryWithInvalidPreference = new CriteriaQuery(
new Criteria("message").contains("some").and("message").contains("message"));
queryWithInvalidPreference.setPreference("_only_nodes:oops");

template.find(queryWithInvalidPreference, SampleEntity.class) //
.as(StepVerifier::create) //
.expectError(ElasticsearchStatusException.class).verify();
}

@Test // DATAES-504
public void shouldReturnProjectedTargetEntity() {

Expand Down

0 comments on commit 45fec5b

Please sign in to comment.