diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java
index 82c98b704..68e14ede5 100644
--- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java
+++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java
@@ -27,41 +27,30 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
-import java.util.stream.Collectors;
import org.apache.http.util.EntityUtils;
import org.elasticsearch.action.ActionFuture;
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest.AliasActions;
-import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
-import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
-import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsRequest;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
-import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequestBuilder;
-import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequest;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
-import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetRequest;
-import org.elasticsearch.action.get.MultiGetRequestBuilder;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
-import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.search.ClearScrollRequest;
import org.elasticsearch.action.search.ClearScrollResponse;
import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequest;
import org.elasticsearch.action.update.UpdateRequest;
-import org.elasticsearch.action.update.UpdateRequestBuilder;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.Response;
@@ -69,14 +58,12 @@ import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.cluster.metadata.AliasMetaData;
import org.elasticsearch.common.Nullable;
-import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.collect.MapBuilder;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.DeprecationHandler;
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MoreLikeThisQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
@@ -1057,10 +1044,15 @@ public class ElasticsearchRestTemplate
}
}
- if (searchQuery.getHighlightFields() != null) {
- HighlightBuilder highlightBuilder = new HighlightBuilder();
- for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) {
- highlightBuilder.field(highlightField);
+ if (searchQuery.getHighlightFields() != null || searchQuery.getHighlightBuilder() != null) {
+ HighlightBuilder highlightBuilder = searchQuery.getHighlightBuilder();
+ if (highlightBuilder == null) {
+ highlightBuilder = new HighlightBuilder();
+ }
+ if(searchQuery.getHighlightFields() != null) {
+ for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) {
+ highlightBuilder.field(highlightField);
+ }
}
searchRequest.source().highlighter(highlightBuilder);
}
diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java
index 3aa71f8ad..b86cca416 100755
--- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java
+++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java
@@ -52,7 +52,6 @@ import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.action.search.SearchScrollRequestBuilder;
import org.elasticsearch.action.update.UpdateRequestBuilder;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.Client;
@@ -911,8 +910,10 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient<
if (highlightBuilder == null) {
highlightBuilder = new HighlightBuilder();
}
- for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) {
- highlightBuilder.field(highlightField);
+ if(searchQuery.getHighlightFields() != null) {
+ for (HighlightBuilder.Field highlightField : searchQuery.getHighlightFields()) {
+ highlightBuilder.field(highlightField);
+ }
}
searchRequest.highlighter(highlightBuilder);
}
diff --git a/src/main/resources/META-INF/spring.schemas b/src/main/resources/META-INF/spring.schemas
index c371d7c4d..9df7fefa6 100644
--- a/src/main/resources/META-INF/spring.schemas
+++ b/src/main/resources/META-INF/spring.schemas
@@ -1,4 +1,2 @@
-http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-1.0.xsd
-http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.1.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-1.1.xsd
-http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-1.0.xsd
-http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-1.1.xsd
+http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-3.2.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-3.2.xsd
+http\://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd=org/springframework/data/elasticsearch/config/spring-elasticsearch-3.2.xsd
diff --git a/src/main/resources/org/springframework/data/elasticsearch/config/spring-elasticsearch-1.1.xsd b/src/main/resources/org/springframework/data/elasticsearch/config/spring-elasticsearch-3.2.xsd
similarity index 98%
rename from src/main/resources/org/springframework/data/elasticsearch/config/spring-elasticsearch-1.1.xsd
rename to src/main/resources/org/springframework/data/elasticsearch/config/spring-elasticsearch-3.2.xsd
index e11018a66..0d71a579f 100644
--- a/src/main/resources/org/springframework/data/elasticsearch/config/spring-elasticsearch-1.1.xsd
+++ b/src/main/resources/org/springframework/data/elasticsearch/config/spring-elasticsearch-3.2.xsd
@@ -1,172 +1,172 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java
index ff9ea216c..6bd7fbedb 100644
--- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java
@@ -15,61 +15,18 @@
*/
package org.springframework.data.elasticsearch.core;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.commons.lang.StringUtils;
-import org.apache.http.HttpHost;
-import org.elasticsearch.action.get.MultiGetItemResponse;
-import org.elasticsearch.action.get.MultiGetResponse;
+import static org.apache.commons.lang.RandomStringUtils.*;
+
+import org.elasticsearch.ElasticsearchStatusException;
import org.elasticsearch.action.index.IndexRequest;
-import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.action.support.IndicesOptions;
-import org.elasticsearch.index.engine.DocumentMissingException;
-import org.elasticsearch.script.Script;
-import org.elasticsearch.script.ScriptType;
-import org.elasticsearch.search.SearchHit;
-import org.elasticsearch.search.SearchHits;
-import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
-import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
-import org.elasticsearch.search.sort.FieldSortBuilder;
-import org.elasticsearch.search.sort.SortBuilders;
-import org.elasticsearch.search.sort.SortOrder;
-import org.elasticsearch.client.RestClient;
-import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
-import org.hamcrest.Matchers;
-import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.elasticsearch.ElasticsearchException;
-import org.springframework.data.elasticsearch.annotations.Document;
-import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
-import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl;
-import org.springframework.data.elasticsearch.core.query.*;
-import org.springframework.data.elasticsearch.entities.HetroEntity1;
-import org.springframework.data.elasticsearch.entities.HetroEntity2;
+import org.springframework.data.elasticsearch.core.query.UpdateQuery;
+import org.springframework.data.elasticsearch.core.query.UpdateQueryBuilder;
import org.springframework.data.elasticsearch.entities.SampleEntity;
-import org.springframework.data.elasticsearch.entities.SampleMappingEntity;
-import org.springframework.data.elasticsearch.entities.UseServerConfigurationEntity;
-import org.springframework.data.util.CloseableIterator;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import static org.apache.commons.lang.RandomStringUtils.*;
-import static org.elasticsearch.index.query.QueryBuilders.*;
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
-import static org.springframework.data.elasticsearch.utils.IndexBuilder.*;
/**
* @author Rizwan Idrees
@@ -86,2000 +43,15 @@ import static org.springframework.data.elasticsearch.utils.IndexBuilder.*;
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:elasticsearch-rest-template-test.xml")
-public class ElasticsearchRestTemplateTests {
+public class ElasticsearchRestTemplateTests extends ElasticsearchTemplateTests {
- private static final String INDEX_NAME = "test-index-sample";
- private static final String INDEX_1_NAME = "test-index-1";
- private static final String INDEX_2_NAME = "test-index-2";
- private static final String TYPE_NAME = "test-type";
-
- @Autowired
- private ElasticsearchRestTemplate elasticsearchTemplate;
-
- @Before
- public void before() {
- elasticsearchTemplate.deleteIndex(SampleEntity.class);
- elasticsearchTemplate.createIndex(SampleEntity.class);
- elasticsearchTemplate.putMapping(SampleEntity.class);
- elasticsearchTemplate.deleteIndex(INDEX_1_NAME);
- elasticsearchTemplate.deleteIndex(INDEX_2_NAME);
- elasticsearchTemplate.deleteIndex(UseServerConfigurationEntity.class);
- elasticsearchTemplate.refresh(SampleEntity.class);
- }
-
- /*
- DATAES-106
- */
- @Test
- public void shouldReturnCountForGivenCriteriaQuery() {
- // 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);
- CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria());
+ @Test(expected = ElasticsearchStatusException.class)
+ public void shouldThrowExceptionIfDocumentDoesNotExistWhileDoingPartialUpdate() {
// when
- long count = elasticsearchTemplate.count(criteriaQuery, SampleEntity.class);
- // then
- assertThat(count, is(equalTo(1L)));
- }
-
- @Test
- public void shouldReturnCountForGivenSearchQuery() {
- // 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 searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
- // when
- long count = elasticsearchTemplate.count(searchQuery, SampleEntity.class);
- // then
- assertThat(count, is(equalTo(1L)));
- }
-
- @Test
- public void shouldReturnObjectForGivenId() {
- // 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);
- // when
- GetQuery getQuery = new GetQuery();
- getQuery.setId(documentId);
- SampleEntity sampleEntity1 = elasticsearchTemplate.queryForObject(getQuery, SampleEntity.class);
- // then
- assertNotNull("entity can't be null....", sampleEntity1);
- assertEquals(sampleEntity, sampleEntity1);
- }
-
- @Test
- public void shouldReturnObjectsForGivenIdsUsingMultiGet() {
- // given
- List indexQueries = new ArrayList<>();
- // first document
- String documentId = randomNumeric(5);
- SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId).message("some message")
- .version(System.currentTimeMillis()).build();
-
- // second document
- String documentId2 = randomNumeric(5);
- SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("some message")
- .version(System.currentTimeMillis()).build();
-
- indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2));
-
- elasticsearchTemplate.bulkIndex(indexQueries);
- elasticsearchTemplate.refresh(SampleEntity.class);
-
- // when
- SearchQuery query = new NativeSearchQueryBuilder().withIds(Arrays.asList(documentId, documentId2)).build();
- LinkedList sampleEntities = elasticsearchTemplate.multiGet(query, SampleEntity.class);
- // then
- assertThat(sampleEntities.size(), is(equalTo(2)));
- assertEquals(sampleEntities.get(0), sampleEntity1);
- assertEquals(sampleEntities.get(1), sampleEntity2);
- }
-
- @Test
- public void shouldReturnObjectsForGivenIdsUsingMultiGetWithFields() {
- // given
- List indexQueries = new ArrayList<>();
- // first document
- String documentId = randomNumeric(5);
- SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId).message("some message").type("type1")
- .version(System.currentTimeMillis()).build();
-
- // second document
- String documentId2 = randomNumeric(5);
- SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("some message").type("type2")
- .version(System.currentTimeMillis()).build();
-
- indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2));
-
- elasticsearchTemplate.bulkIndex(indexQueries);
- elasticsearchTemplate.refresh(SampleEntity.class);
-
- // when
- SearchQuery query = new NativeSearchQueryBuilder().withIds(Arrays.asList(documentId, documentId2))
- .withFields("message", "type").build();
- LinkedList sampleEntities = elasticsearchTemplate.multiGet(query, SampleEntity.class,
- new MultiGetResultMapper() {
- @Override
- public LinkedList mapResults(MultiGetResponse responses, Class clazz) {
- LinkedList list = new LinkedList<>();
- for (MultiGetItemResponse response : responses.getResponses()) {
- SampleEntity entity = new SampleEntity();
- entity.setId(response.getResponse().getId());
- entity.setMessage((String) response.getResponse().getSource().get("message"));
- entity.setType((String) response.getResponse().getSource().get("type"));
- list.add((T) entity);
- }
- return list;
- }
- });
- // then
- assertThat(sampleEntities.size(), is(equalTo(2)));
- }
-
- @Test
- public void shouldReturnPageForGivenSearchQuery() {
- // 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 searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
- // when
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
- // then
- assertThat(sampleEntities, is(notNullValue()));
- assertThat(sampleEntities.getTotalElements(), greaterThanOrEqualTo(1L));
- }
-
- // DATAES-422 - Add support for IndicesOptions in search queries
- @Test
- public void shouldPassIndicesOptionsForGivenSearchQuery() {
- // given
- String documentId = randomNumeric(5);
- SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message("some message")
- .version(System.currentTimeMillis()).build();
-
- IndexQuery idxQuery = new IndexQueryBuilder().withIndexName(INDEX_1_NAME).withId(sampleEntity.getId())
- .withObject(sampleEntity).build();
-
- elasticsearchTemplate.index(idxQuery);
- elasticsearchTemplate.refresh(INDEX_1_NAME);
-
- // when
- SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
- .withIndices(INDEX_1_NAME, INDEX_2_NAME).withIndicesOptions(IndicesOptions.lenientExpandOpen()).build();
- Page entities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
- // then
- assertThat(entities, is(notNullValue()));
- assertThat(entities.getTotalElements(), greaterThanOrEqualTo(1L));
- }
-
- @Test
- public void shouldDoBulkIndex() {
- // given
- List indexQueries = new ArrayList<>();
- // first document
- String documentId = randomNumeric(5);
- SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId).message("some message")
- .version(System.currentTimeMillis()).build();
-
- // second document
- String documentId2 = randomNumeric(5);
- SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("some message")
- .version(System.currentTimeMillis()).build();
-
- indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2));
-
- // when
- elasticsearchTemplate.bulkIndex(indexQueries);
- elasticsearchTemplate.refresh(SampleEntity.class);
- // then
- SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
- assertThat(sampleEntities.getTotalElements(), is(equalTo(2L)));
- }
-
- @Test
- public void shouldDoBulkUpdate() {
- // given
- String documentId = randomNumeric(5);
- String messageBeforeUpdate = "some test message";
- String messageAfterUpdate = "test message";
-
- SampleEntity sampleEntity = SampleEntity.builder().id(documentId).message(messageBeforeUpdate)
- .version(System.currentTimeMillis()).build();
-
- IndexQuery indexQuery = getIndexQuery(sampleEntity);
-
- elasticsearchTemplate.index(indexQuery);
- elasticsearchTemplate.refresh(SampleEntity.class);
-
IndexRequest indexRequest = new IndexRequest();
- indexRequest.source("message", messageAfterUpdate);
- UpdateQuery updateQuery = new UpdateQueryBuilder().withId(documentId).withClass(SampleEntity.class)
- .withIndexRequest(indexRequest).build();
-
- List queries = new ArrayList<>();
- queries.add(updateQuery);
-
- // when
- elasticsearchTemplate.bulkUpdate(queries);
- // then
- GetQuery getQuery = new GetQuery();
- getQuery.setId(documentId);
- SampleEntity indexedEntity = elasticsearchTemplate.queryForObject(getQuery, SampleEntity.class);
- assertThat(indexedEntity.getMessage(), is(messageAfterUpdate));
- }
-
- @Test
- public void shouldDeleteDocumentForGivenId() {
- // 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);
- // when
- elasticsearchTemplate.delete(INDEX_NAME, TYPE_NAME, documentId);
- elasticsearchTemplate.refresh(SampleEntity.class);
- // then
- SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
- assertThat(sampleEntities.getTotalElements(), equalTo(0L));
- }
-
- @Test
- public void shouldDeleteEntityForGivenId() {
- // 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);
- // when
- elasticsearchTemplate.delete(SampleEntity.class, documentId);
- elasticsearchTemplate.refresh(SampleEntity.class);
- // then
- SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
- assertThat(sampleEntities.getTotalElements(), equalTo(0L));
- }
-
- @Test
- public void shouldDeleteDocumentForGivenQuery() {
- // 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);
-
- // when
- DeleteQuery deleteQuery = new DeleteQuery();
- deleteQuery.setQuery(termQuery("id", documentId));
- elasticsearchTemplate.delete(deleteQuery, SampleEntity.class);
- elasticsearchTemplate.refresh(SampleEntity.class);
- // then
- SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
- assertThat(sampleEntities.getTotalElements(), equalTo(0L));
- }
-
- @Test
- public void shouldFilterSearchResultsForGivenFilter() {
- // 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 searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
- .withFilter(boolQuery().filter(termQuery("id", documentId))).build();
- // when
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
- // then
- assertThat(sampleEntities.getTotalElements(), equalTo(1L));
- }
-
- @Test
- public void shouldSortResultsGivenSortCriteria() {
- // given
- List indexQueries = new ArrayList<>();
- // first document
- String documentId = randomNumeric(5);
- SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId).message("abc").rate(10)
- .version(System.currentTimeMillis()).build();
-
- // second document
- String documentId2 = randomNumeric(5);
- SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("xyz").rate(5)
- .version(System.currentTimeMillis()).build();
-
- // third document
- String documentId3 = randomNumeric(5);
- SampleEntity sampleEntity3 = SampleEntity.builder().id(documentId3).message("xyz").rate(15)
- .version(System.currentTimeMillis()).build();
-
- indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3));
-
- elasticsearchTemplate.bulkIndex(indexQueries);
- elasticsearchTemplate.refresh(SampleEntity.class);
-
- SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
- .withSort(new FieldSortBuilder("rate").order(SortOrder.ASC)).build();
- // when
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
- // then
- assertThat(sampleEntities.getTotalElements(), equalTo(3L));
- assertThat(sampleEntities.getContent().get(0).getRate(), is(sampleEntity2.getRate()));
- }
-
- @Test
- public void shouldSortResultsGivenMultipleSortCriteria() {
- // given
- List indexQueries = new ArrayList<>();
- // first document
- String documentId = randomNumeric(5);
- SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId).message("abc").rate(10)
- .version(System.currentTimeMillis()).build();
-
- // second document
- String documentId2 = randomNumeric(5);
- SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("xyz").rate(5)
- .version(System.currentTimeMillis()).build();
-
- // third document
- String documentId3 = randomNumeric(5);
- SampleEntity sampleEntity3 = SampleEntity.builder().id(documentId3).message("xyz").rate(15)
- .version(System.currentTimeMillis()).build();
-
- indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3));
-
- elasticsearchTemplate.bulkIndex(indexQueries);
- elasticsearchTemplate.refresh(SampleEntity.class);
-
- SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
- .withSort(new FieldSortBuilder("rate").order(SortOrder.ASC))
- .withSort(new FieldSortBuilder("message").order(SortOrder.ASC)).build();
- // when
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
- // then
- assertThat(sampleEntities.getTotalElements(), equalTo(3L));
- assertThat(sampleEntities.getContent().get(0).getRate(), is(sampleEntity2.getRate()));
- assertThat(sampleEntities.getContent().get(1).getMessage(), is(sampleEntity1.getMessage()));
- }
-
- @Test // DATAES-312
- public void shouldSortResultsGivenNullFirstSortCriteria() {
- // given
- List indexQueries;
-
- // first document
- String documentId = randomNumeric(5);
- SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId).message("abc").rate(15)
- .version(System.currentTimeMillis()).build();
-
- // second document
- String documentId2 = randomNumeric(5);
- SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("xyz").rate(5)
- .version(System.currentTimeMillis()).build();
-
- // third document
- String documentId3 = randomNumeric(5);
- SampleEntity sampleEntity3 = SampleEntity.builder().id(documentId3).rate(10).version(System.currentTimeMillis())
- .build();
-
- indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3));
-
- elasticsearchTemplate.bulkIndex(indexQueries);
- elasticsearchTemplate.refresh(SampleEntity.class);
-
- SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
- .withPageable(PageRequest.of(0, 10, Sort.by(Sort.Order.asc("message").nullsFirst()))).build();
-
- // when
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
-
- // then
- assertThat(sampleEntities.getTotalElements(), equalTo(3L));
- assertThat(sampleEntities.getContent().get(0).getRate(), is(sampleEntity3.getRate()));
- assertThat(sampleEntities.getContent().get(1).getMessage(), is(sampleEntity1.getMessage()));
- }
-
- @Test // DATAES-312
- public void shouldSortResultsGivenNullLastSortCriteria() {
- // given
- List indexQueries;
-
- // first document
- String documentId = randomNumeric(5);
- SampleEntity sampleEntity1 = SampleEntity.builder().id(documentId).message("abc").rate(15)
- .version(System.currentTimeMillis()).build();
-
- // second document
- String documentId2 = randomNumeric(5);
- SampleEntity sampleEntity2 = SampleEntity.builder().id(documentId2).message("xyz").rate(5)
- .version(System.currentTimeMillis()).build();
-
- // third document
- String documentId3 = randomNumeric(5);
- SampleEntity sampleEntity3 = SampleEntity.builder().id(documentId3).rate(10).version(System.currentTimeMillis())
- .build();
-
- indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2, sampleEntity3));
-
- elasticsearchTemplate.bulkIndex(indexQueries);
- elasticsearchTemplate.refresh(SampleEntity.class);
-
- SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
- .withPageable(PageRequest.of(0, 10, Sort.by(Sort.Order.asc("message").nullsLast()))).build();
-
- // when
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
-
- // then
- assertThat(sampleEntities.getTotalElements(), equalTo(3L));
- assertThat(sampleEntities.getContent().get(0).getRate(), is(sampleEntity1.getRate()));
- assertThat(sampleEntities.getContent().get(1).getMessage(), is(sampleEntity2.getMessage()));
- }
-
- @Test
- public void shouldExecuteStringQuery() {
- // 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);
-
- StringQuery stringQuery = new StringQuery(matchAllQuery().toString());
- // when
- Page sampleEntities = elasticsearchTemplate.queryForPage(stringQuery, SampleEntity.class);
- // then
- assertThat(sampleEntities.getTotalElements(), equalTo(1L));
- }
-
- @Test
- public void shouldUseScriptedFields() {
- // given
- String documentId = randomNumeric(5);
- SampleEntity sampleEntity = new SampleEntity();
- sampleEntity.setId(documentId);
- sampleEntity.setRate(2);
- sampleEntity.setMessage("some message");
- sampleEntity.setVersion(System.currentTimeMillis());
-
- IndexQuery indexQuery = new IndexQuery();
- indexQuery.setId(documentId);
- indexQuery.setObject(sampleEntity);
-
- elasticsearchTemplate.index(indexQuery);
- elasticsearchTemplate.refresh(SampleEntity.class);
-
- Map params = new HashMap<>();
- params.put("factor", 2);
- // when
- SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withScriptField(
- new ScriptField("scriptedRate", new Script(ScriptType.INLINE, "expression", "doc['rate'] * factor", params)))
- .build();
- Page sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
- // then
- assertThat(sampleEntities.getTotalElements(), equalTo(1L));
- assertThat(sampleEntities.getContent().get(0).getScriptedRate(), equalTo(4.0));
- }
-
- @Test
- public void shouldReturnPageableResultsGivenStringQuery() {
- // 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);
-
- StringQuery stringQuery = new StringQuery(matchAllQuery().toString(), new PageRequest(0, 10));
- // when
- Page sampleEntities = elasticsearchTemplate.queryForPage(stringQuery, SampleEntity.class);
-
- // then
- assertThat(sampleEntities.getTotalElements(), is(greaterThanOrEqualTo(1L)));
- }
-
- @Test
- public void shouldReturnSortedPageableResultsGivenStringQuery() {
- // 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);
- elasticsearchTemplate.refresh(SampleEntity.class);
-
- StringQuery stringQuery = new StringQuery(matchAllQuery().toString(), new PageRequest(0, 10),
- new Sort(new Sort.Order(Sort.Direction.ASC, "message")));
- // when
- Page sampleEntities = elasticsearchTemplate.queryForPage(stringQuery, SampleEntity.class);
- // then
- assertThat(sampleEntities.getTotalElements(), is(greaterThanOrEqualTo(1L)));
- }
-
- @Test
- public void shouldReturnObjectMatchingGivenStringQuery() {
- // 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);
-
- StringQuery stringQuery = new StringQuery(termQuery("id", documentId).toString());
- // when
- SampleEntity sampleEntity1 = elasticsearchTemplate.queryForObject(stringQuery, SampleEntity.class);
- // then
- assertThat(sampleEntity1, is(notNullValue()));
- assertThat(sampleEntity1.getId(), is(equalTo(documentId)));
- }
-
- @Test
- public void shouldCreateIndexGivenEntityClass() {
- // when
- boolean created = elasticsearchTemplate.createIndex(SampleEntity.class);
- elasticsearchTemplate.putMapping(SampleEntity.class);
- final Map setting = elasticsearchTemplate.getSetting(SampleEntity.class);
- // then
- assertThat(created, is(true));
- assertThat(setting.get("index.number_of_shards"), Matchers.