diff --git a/src/main/asciidoc/reference/elasticsearch-new.adoc b/src/main/asciidoc/reference/elasticsearch-new.adoc
index ed16aa0e9..fa7818452 100644
--- a/src/main/asciidoc/reference/elasticsearch-new.adoc
+++ b/src/main/asciidoc/reference/elasticsearch-new.adoc
@@ -9,7 +9,7 @@
[[new-features.5-1-0]]
== New in Spring Data Elasticsearch 5.1
-* Upgrade to Elasticsearch 8.7.0
+* Upgrade to Elasticsearch 8.7.1
* Allow specification of the TLS certificate when connecting to an Elasticsearch 8 cluster
[[new-features.5-0-0]]
diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchOperations.java b/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchOperations.java
index 8cc95a825..e7a45e164 100644
--- a/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchOperations.java
+++ b/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchOperations.java
@@ -17,7 +17,6 @@ package org.springframework.data.elasticsearch.core;
import org.reactivestreams.Publisher;
import org.springframework.data.elasticsearch.client.erhlc.ReactiveElasticsearchClient;
-import org.springframework.data.elasticsearch.client.erhlc.ReactiveElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.cluster.ReactiveClusterOperations;
import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter;
import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity;
@@ -28,11 +27,6 @@ import org.springframework.lang.Nullable;
/**
* Interface that specifies a basic set of Elasticsearch operations executed in a reactive way.
- *
- * Implemented by {@link ReactiveElasticsearchTemplate}. Not often used but a useful option for extensibility and
- * testability (as it can be easily mocked, stubbed, or be the target of a JDK proxy). Command execution using
- * {@link ReactiveElasticsearchOperations} is deferred until a {@link org.reactivestreams.Subscriber} subscribes to the
- * {@link Publisher}.
*
* @author Christoph Strobl
* @author Peter-Josef Meisch
diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateCallbackTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateCallbackTests.java
deleted file mode 100644
index a91f57b11..000000000
--- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateCallbackTests.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright 2020-2023 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.data.elasticsearch.core;
-
-import static org.mockito.Mockito.*;
-
-import java.util.HashMap;
-
-import org.elasticsearch.action.bulk.BulkItemResponse;
-import org.elasticsearch.action.bulk.BulkRequest;
-import org.elasticsearch.action.bulk.BulkResponse;
-import org.elasticsearch.action.get.GetRequest;
-import org.elasticsearch.action.get.GetResponse;
-import org.elasticsearch.action.get.MultiGetItemResponse;
-import org.elasticsearch.action.get.MultiGetRequest;
-import org.elasticsearch.action.get.MultiGetResponse;
-import org.elasticsearch.action.index.IndexRequest;
-import org.elasticsearch.action.index.IndexResponse;
-import org.elasticsearch.action.search.MultiSearchRequest;
-import org.elasticsearch.action.search.MultiSearchResponse;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.action.search.SearchScrollRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.client.RestHighLevelClient;
-import org.elasticsearch.common.bytes.BytesArray;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.mockito.junit.jupiter.MockitoSettings;
-import org.mockito.quality.Strictness;
-import org.springframework.data.elasticsearch.client.erhlc.ElasticsearchRestTemplate;
-
-/**
- * @author Roman Puchkovskiy
- */
-@ExtendWith(MockitoExtension.class)
-@MockitoSettings(strictness = Strictness.LENIENT)
-class ElasticsearchRestTemplateCallbackTests extends ElasticsearchTemplateCallbackTests {
-
- @Mock private RestHighLevelClient client;
-
- @Mock private IndexResponse indexResponse;
- @Mock private BulkResponse bulkResponse;
- @Mock private BulkItemResponse bulkItemResponse;
- @Mock private GetResponse getResponse;
- @Mock private MultiGetResponse multiGetResponse;
- @Mock private MultiGetItemResponse multiGetItemResponse;
- @Mock private MultiSearchResponse.Item multiSearchResponseItem;
-
- @SuppressWarnings("deprecation") // we know what we test
- @BeforeEach
- public void setUp() throws Exception {
- initTemplate(new ElasticsearchRestTemplate(client));
-
- doReturn(indexResponse).when(client).index(any(IndexRequest.class), any(RequestOptions.class));
- doReturn("response-id").when(indexResponse).getId();
-
- doReturn(bulkResponse).when(client).bulk(any(BulkRequest.class), any(RequestOptions.class));
- doReturn(new BulkItemResponse[] { bulkItemResponse, bulkItemResponse }).when(bulkResponse).getItems();
- doReturn("response-id").when(bulkItemResponse).getId();
-
- doReturn(getResponse).when(client).get(any(GetRequest.class), any(RequestOptions.class));
-
- doReturn(true).when(getResponse).isExists();
- doReturn(false).when(getResponse).isSourceEmpty();
- doReturn(new HashMap() {
- {
- put("id", "init");
- put("firstname", "luke");
- }
- }).when(getResponse).getSourceAsMap();
-
- doReturn(multiGetResponse).when(client).mget(any(MultiGetRequest.class), any(RequestOptions.class));
- doReturn(new MultiGetItemResponse[] { multiGetItemResponse, multiGetItemResponse }).when(multiGetResponse)
- .getResponses();
- doReturn(getResponse).when(multiGetItemResponse).getResponse();
-
- doReturn(searchResponse).when(client).search(any(SearchRequest.class), any(RequestOptions.class));
- doReturn(nSearchHits(2)).when(searchResponse).getHits();
- doReturn("scroll-id").when(searchResponse).getScrollId();
- doReturn(new BytesArray(new byte[8])).when(searchHit).getSourceRef();
- doReturn(new HashMap() {
- {
- put("id", "init");
- put("firstname", "luke");
- }
- }).when(searchHit).getSourceAsMap();
-
- MultiSearchResponse multiSearchResponse = new MultiSearchResponse(
- new MultiSearchResponse.Item[] { multiSearchResponseItem }, 1L);
- doReturn(multiSearchResponse).when(client).multiSearch(any(MultiSearchRequest.class), any());
- doReturn(multiSearchResponse).when(client).msearch(any(MultiSearchRequest.class), any());
- doReturn(searchResponse).when(multiSearchResponseItem).getResponse();
-
- doReturn(searchResponse).when(client).scroll(any(SearchScrollRequest.class), any(RequestOptions.class));
- }
-}
diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateCallbackTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateCallbackTests.java
deleted file mode 100644
index 16c62b727..000000000
--- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateCallbackTests.java
+++ /dev/null
@@ -1,561 +0,0 @@
-/*
- * Copyright 2020-2023 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.data.elasticsearch.core;
-
-import static java.util.Collections.*;
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Objects;
-
-import org.apache.lucene.search.TotalHits;
-import org.elasticsearch.action.search.SearchResponse;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.springframework.data.annotation.Id;
-import org.springframework.data.elasticsearch.client.erhlc.NativeSearchQueryBuilder;
-import org.springframework.data.elasticsearch.core.document.Document;
-import org.springframework.data.elasticsearch.core.event.AfterConvertCallback;
-import org.springframework.data.elasticsearch.core.event.AfterSaveCallback;
-import org.springframework.data.elasticsearch.core.event.BeforeConvertCallback;
-import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
-import org.springframework.data.elasticsearch.core.query.BulkOptions;
-import org.springframework.data.elasticsearch.core.query.IndexQuery;
-import org.springframework.data.elasticsearch.core.query.MoreLikeThisQuery;
-import org.springframework.data.elasticsearch.core.query.Query;
-import org.springframework.data.mapping.callback.EntityCallbacks;
-import org.springframework.data.util.CloseableIterator;
-import org.springframework.lang.Nullable;
-import org.springframework.util.CollectionUtils;
-
-/**
- * @author Roman Puchkovskiy
- */
-abstract class ElasticsearchTemplateCallbackTests {
-
- protected AbstractElasticsearchTemplate template;
-
- @Mock protected SearchResponse searchResponse;
- @Mock protected org.elasticsearch.search.SearchHit searchHit;
-
- private final IndexCoordinates index = IndexCoordinates.of("index");
-
- @Spy private ValueCapturingAfterSaveCallback afterSaveCallback = new ValueCapturingAfterSaveCallback();
- @Spy private ValueCapturingAfterConvertCallback afterConvertCallback = new ValueCapturingAfterConvertCallback();
- @Spy private ValueCapturingBeforeConvertCallback beforeConvertCallback = new ValueCapturingBeforeConvertCallback();
-
- protected final void initTemplate(AbstractElasticsearchTemplate template) {
- this.template = template;
- }
-
- protected final org.elasticsearch.search.SearchHits nSearchHits(int count) {
- org.elasticsearch.search.SearchHit[] hits = new org.elasticsearch.search.SearchHit[count];
- Arrays.fill(hits, searchHit);
- return new org.elasticsearch.search.SearchHits(hits, new TotalHits(count, TotalHits.Relation.EQUAL_TO), 1.0f);
- }
-
- @Test // DATAES-771
- void saveOneShouldInvokeAfterSaveCallbacks() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback));
-
- Person entity = new Person("init", "luke");
-
- Person saved = template.save(entity);
-
- verify(afterSaveCallback).onAfterSave(eq(entity), any());
- assertThat(saved.firstname).isEqualTo("after-save");
- }
-
- @Test // DATAES-771
- void saveWithIndexCoordinatesShouldInvokeAfterSaveCallbacks() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback));
-
- Person entity = new Person("init", "luke");
-
- Person saved = template.save(entity, index);
-
- verify(afterSaveCallback).onAfterSave(eq(entity), eq(index));
- assertThat(saved.firstname).isEqualTo("after-save");
- }
-
- @Test // DATAES-771
- void saveArrayShouldInvokeAfterSaveCallbacks() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback));
-
- Person entity1 = new Person("init1", "luke1");
- Person entity2 = new Person("init2", "luke2");
-
- Iterable saved = template.save(entity1, entity2);
-
- verify(afterSaveCallback, times(2)).onAfterSave(any(), any());
- Iterator savedIterator = saved.iterator();
- assertThat(savedIterator.next().firstname).isEqualTo("after-save");
- assertThat(savedIterator.next().firstname).isEqualTo("after-save");
- }
-
- @Test // DATAES-771
- void saveIterableShouldInvokeAfterSaveCallbacks() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback));
-
- Person entity1 = new Person("init1", "luke1");
- Person entity2 = new Person("init2", "luke2");
-
- Iterable saved = template.save(Arrays.asList(entity1, entity2));
-
- verify(afterSaveCallback, times(2)).onAfterSave(any(), any());
- Iterator savedIterator = saved.iterator();
- assertThat(savedIterator.next().firstname).isEqualTo("after-save");
- assertThat(savedIterator.next().firstname).isEqualTo("after-save");
- }
-
- @Test // DATAES-771
- void saveIterableWithIndexCoordinatesShouldInvokeAfterSaveCallbacks() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback));
-
- Person entity1 = new Person("init1", "luke1");
- Person entity2 = new Person("init2", "luke2");
-
- Iterable saved = template.save(Arrays.asList(entity1, entity2), index);
-
- verify(afterSaveCallback, times(2)).onAfterSave(any(), eq(index));
- Iterator savedIterator = saved.iterator();
- assertThat(savedIterator.next().firstname).isEqualTo("after-save");
- assertThat(savedIterator.next().firstname).isEqualTo("after-save");
- }
-
- @Test // DATAES-771
- void indexShouldInvokeAfterSaveCallbacks() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback));
-
- Person entity = new Person("init", "luke");
-
- IndexQuery indexQuery = indexQueryForEntity(entity);
- template.index(indexQuery, index);
-
- verify(afterSaveCallback).onAfterSave(eq(entity), eq(index));
- Person savedPerson = (Person) indexQuery.getObject();
- assertThat(savedPerson.firstname).isEqualTo("after-save");
- }
-
- private IndexQuery indexQueryForEntity(Person entity) {
- IndexQuery indexQuery = new IndexQuery();
- indexQuery.setObject(entity);
- return indexQuery;
- }
-
- @Test // DATAES-771
- void bulkIndexShouldInvokeAfterSaveCallbacks() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback));
-
- Person entity1 = new Person("init1", "luke1");
- Person entity2 = new Person("init2", "luke2");
-
- IndexQuery query1 = indexQueryForEntity(entity1);
- IndexQuery query2 = indexQueryForEntity(entity2);
- template.bulkIndex(Arrays.asList(query1, query2), index);
-
- verify(afterSaveCallback, times(2)).onAfterSave(any(), eq(index));
- Person savedPerson1 = (Person) query1.getObject();
- Person savedPerson2 = (Person) query2.getObject();
- assertThat(savedPerson1.firstname).isEqualTo("after-save");
- assertThat(savedPerson2.firstname).isEqualTo("after-save");
- }
-
- @Test // DATAES-771
- void bulkIndexWithOptionsShouldInvokeAfterSaveCallbacks() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterSaveCallback));
-
- Person entity1 = new Person("init1", "luke1");
- Person entity2 = new Person("init2", "luke2");
-
- IndexQuery query1 = indexQueryForEntity(entity1);
- IndexQuery query2 = indexQueryForEntity(entity2);
- template.bulkIndex(Arrays.asList(query1, query2), BulkOptions.defaultOptions(), index);
-
- verify(afterSaveCallback, times(2)).onAfterSave(any(), eq(index));
- Person savedPerson1 = (Person) query1.getObject();
- Person savedPerson2 = (Person) query2.getObject();
- assertThat(savedPerson1.firstname).isEqualTo("after-save");
- assertThat(savedPerson2.firstname).isEqualTo("after-save");
- }
-
- @Test // DATAES-772
- void getShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- Person result = template.get("init", Person.class);
-
- verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()), any());
- assertThat(result.firstname).isEqualTo("after-convert");
- }
-
- private Document lukeDocument() {
- return Document.create().append("id", "init").append("firstname", "luke");
- }
-
- @Test // DATAES-772
- void getWithCoordinatesShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- Person result = template.get("init", Person.class, index);
-
- verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()), eq(index));
- assertThat(result.firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-772, #1678
- void multiGetShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- List> results = template.multiGet(queryForTwo(), Person.class, index);
-
- verify(afterConvertCallback, times(2)).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()),
- eq(index));
- assertThat(results.get(0).getItem().firstname).isEqualTo("after-convert");
- assertThat(results.get(1).getItem().firstname).isEqualTo("after-convert");
- }
-
- private Query queryForTwo() {
- return new NativeSearchQueryBuilder().withIds(Arrays.asList("init1", "init2")).build();
- }
-
- private Query queryForOne() {
- return new NativeSearchQueryBuilder().withIds(singletonList("init")).build();
- }
-
- private void skipItemsFromScrollStart(CloseableIterator results) {
- results.next();
- results.next();
- }
-
- @Test // DATAES-772
- void moreLikeThisShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- SearchHits results = template.search(moreLikeThisQuery(), Person.class, index);
-
- verify(afterConvertCallback, times(2)).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()),
- eq(index));
- assertThat(results.getSearchHit(0).getContent().firstname).isEqualTo("after-convert");
- assertThat(results.getSearchHit(1).getContent().firstname).isEqualTo("after-convert");
- }
-
- private MoreLikeThisQuery moreLikeThisQuery() {
- MoreLikeThisQuery query = new MoreLikeThisQuery();
- query.setId("init");
- query.addFields("id");
- return query;
- }
-
- @Test // DATAES-772
- void searchOneShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- doReturn(nSearchHits(1)).when(searchResponse).getHits();
-
- SearchHit result = template.searchOne(queryForOne(), Person.class);
-
- verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()), any());
- assertThat(result.getContent().firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-772
- void searchOneWithIndexCoordinatesShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- doReturn(nSearchHits(1)).when(searchResponse).getHits();
-
- SearchHit result = template.searchOne(queryForOne(), Person.class, index);
-
- verify(afterConvertCallback).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()), eq(index));
- assertThat(result.getContent().firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-772
- void multiSearchShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- List> results = template.multiSearch(singletonList(queryForTwo()), Person.class, index);
-
- verify(afterConvertCallback, times(2)).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()),
- eq(index));
- List> hits = results.get(0).getSearchHits();
- assertThat(hits.get(0).getContent().firstname).isEqualTo("after-convert");
- assertThat(hits.get(1).getContent().firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-772
- void multiSearchWithMultipleEntityClassesShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- List> results = template.multiSearch(singletonList(queryForTwo()), singletonList(Person.class),
- index);
-
- verify(afterConvertCallback, times(2)).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()),
- eq(index));
- List extends SearchHit>> hits = results.get(0).getSearchHits();
- assertThat(((Person) hits.get(0).getContent()).firstname).isEqualTo("after-convert");
- assertThat(((Person) hits.get(1).getContent()).firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-772
- void searchShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- SearchHits results = template.search(queryForTwo(), Person.class);
-
- verify(afterConvertCallback, times(2)).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()), any());
- List> hits = results.getSearchHits();
- assertThat(hits.get(0).getContent().firstname).isEqualTo("after-convert");
- assertThat(hits.get(1).getContent().firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-772
- void searchWithIndexCoordinatesShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- SearchHits results = template.search(queryForTwo(), Person.class, index);
-
- verify(afterConvertCallback, times(2)).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()),
- eq(index));
- List> hits = results.getSearchHits();
- assertThat(hits.get(0).getContent().firstname).isEqualTo("after-convert");
- assertThat(hits.get(1).getContent().firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-772
- void searchViaMoreLikeThisShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- SearchHits results = template.search(moreLikeThisQuery(), Person.class);
-
- verify(afterConvertCallback, times(2)).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()), any());
- List> hits = results.getSearchHits();
- assertThat(hits.get(0).getContent().firstname).isEqualTo("after-convert");
- assertThat(hits.get(1).getContent().firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-772
- void searchViaMoreLikeThisWithIndexCoordinatesShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- SearchHits results = template.search(moreLikeThisQuery(), Person.class, index);
-
- verify(afterConvertCallback, times(2)).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()),
- eq(index));
- List> hits = results.getSearchHits();
- assertThat(hits.get(0).getContent().firstname).isEqualTo("after-convert");
- assertThat(hits.get(1).getContent().firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-772
- void searchForStreamShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- SearchHitsIterator results = template.searchForStream(queryForTwo(), Person.class);
-
- verify(afterConvertCallback, times(2)).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()), any());
- assertThat(results.next().getContent().firstname).isEqualTo("after-convert");
- assertThat(results.next().getContent().firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-772
- void searchForStreamWithIndexCoordinatesShouldInvokeAfterConvertCallback() {
-
- template.setEntityCallbacks(EntityCallbacks.create(afterConvertCallback));
-
- SearchHitsIterator results = template.searchForStream(queryForTwo(), Person.class, index);
-
- verify(afterConvertCallback, times(2)).onAfterConvert(eq(new Person("init", "luke")), eq(lukeDocument()),
- eq(index));
- assertThat(results.next().getContent().firstname).isEqualTo("after-convert");
- assertThat(results.next().getContent().firstname).isEqualTo("after-convert");
- }
-
- @Test // DATAES-785
- void saveOneShouldInvokeBeforeConvertCallbacks() {
-
- template.setEntityCallbacks(EntityCallbacks.create(beforeConvertCallback));
-
- Person entity = new Person("init1", "luke1");
-
- Person saved = template.save(entity, index);
-
- verify(beforeConvertCallback).onBeforeConvert(any(), eq(index));
- assertThat(saved.firstname).isEqualTo("before-convert");
- }
-
- @Test // DATAES-785
- void saveAllShouldInvokeBeforeConvertCallbacks() {
-
- template.setEntityCallbacks(EntityCallbacks.create(beforeConvertCallback));
-
- Person entity1 = new Person("init1", "luke1");
- Person entity2 = new Person("init2", "luke2");
-
- Iterable saved = template.save(Arrays.asList(entity1, entity2), index);
-
- verify(beforeConvertCallback, times(2)).onBeforeConvert(any(), eq(index));
- Iterator iterator = saved.iterator();
- assertThat(iterator.next().firstname).isEqualTo("before-convert");
- assertThat(iterator.next().firstname).isEqualTo("before-convert");
- }
-
- static class Person {
- @Nullable
- @Id String id;
- @Nullable String firstname;
-
- public Person(@Nullable String id, @Nullable String firstname) {
- this.id = id;
- this.firstname = firstname;
- }
-
- public Person() {}
-
- @Nullable
- public String getId() {
- return id;
- }
-
- public void setId(@Nullable String id) {
- this.id = id;
- }
-
- @Nullable
- public String getFirstname() {
- return firstname;
- }
-
- public void setFirstname(@Nullable String firstname) {
- this.firstname = firstname;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o)
- return true;
- if (o == null || getClass() != o.getClass())
- return false;
-
- Person person = (Person) o;
-
- if (!Objects.equals(id, person.id))
- return false;
- return Objects.equals(firstname, person.firstname);
- }
-
- @Override
- public int hashCode() {
- int result = id != null ? id.hashCode() : 0;
- result = 31 * result + (firstname != null ? firstname.hashCode() : 0);
- return result;
- }
- }
-
- static class ValueCapturingEntityCallback {
-
- private final List values = new ArrayList<>(1);
-
- protected void capture(T value) {
- values.add(value);
- }
-
- public List getValues() {
- return values;
- }
-
- @Nullable
- public T getValue() {
- return CollectionUtils.lastElement(values);
- }
-
- }
-
- static class ValueCapturingAfterSaveCallback extends ValueCapturingEntityCallback
- implements AfterSaveCallback {
-
- @Override
- public Person onAfterSave(Person entity, IndexCoordinates index) {
-
- capture(entity);
- return new Person() {
- {
- id = entity.id;
- firstname = "after-save";
- }
- };
- }
- }
-
- static class ValueCapturingAfterConvertCallback extends ValueCapturingEntityCallback
- implements AfterConvertCallback {
-
- @Override
- public Person onAfterConvert(Person entity, Document document, IndexCoordinates indexCoordinates) {
-
- capture(entity);
- return new Person() {
- {
- id = entity.id;
- firstname = "after-convert";
- }
- };
- }
- }
-
- static class ValueCapturingBeforeConvertCallback extends ValueCapturingEntityCallback
- implements BeforeConvertCallback {
-
- @Override
- public Person onBeforeConvert(Person entity, IndexCoordinates indexCoordinates) {
-
- capture(entity);
- return new Person() {
- {
- id = entity.id;
- firstname = "before-convert";
- }
- };
- }
- }
-}
diff --git a/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsELCIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsELCIntegrationTests.java
new file mode 100644
index 000000000..381274e5d
--- /dev/null
+++ b/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsELCIntegrationTests.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.data.elasticsearch.core.suggest;
+
+import co.elastic.clients.elasticsearch.core.search.CompletionContext;
+import co.elastic.clients.elasticsearch.core.search.FieldSuggester;
+import co.elastic.clients.elasticsearch.core.search.SuggestFuzziness;
+import co.elastic.clients.elasticsearch.core.search.Suggester;
+
+import java.util.List;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.data.elasticsearch.client.elc.NativeQuery;
+import org.springframework.data.elasticsearch.core.query.Query;
+import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration;
+import org.springframework.data.elasticsearch.utils.IndexNameProvider;
+import org.springframework.test.context.ContextConfiguration;
+
+/**
+ * @author Peter-Josef Meisch
+ * @since 5.1
+ */
+@ContextConfiguration(classes = { CompletionWithContextsELCIntegrationTests.Config.class })
+public class CompletionWithContextsELCIntegrationTests extends CompletionWithContextsIntegrationTests {
+ @Configuration
+ @Import({ ElasticsearchTemplateConfiguration.class })
+ static class Config {
+ @Bean
+ IndexNameProvider indexNameProvider() {
+ return new IndexNameProvider("completion-context");
+ }
+ }
+
+ @Override
+ protected Query getSearchQuery(String suggestionName, String category) {
+ return NativeQuery.builder() //
+ .withSuggester(Suggester.of(s -> s //
+ .suggesters(//
+ suggestionName, //
+ FieldSuggester.of(fs -> fs //
+ .prefix("m") //
+ .completion(cs -> cs //
+ .field("suggest") //
+ .fuzzy(SuggestFuzziness.of(f -> f.fuzziness("AUTO"))) //
+ .contexts( //
+ ContextCompletionEntity.LANGUAGE_CATEGORY, //
+ List.of(CompletionContext.of(cc -> cc //
+ .context(cb -> cb.category(category)) //
+ )) //
+ ) //
+ ) //
+ ) //
+ ))) //
+ .build();
+ }
+}
diff --git a/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsERHLCIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsERHLCIntegrationTests.java
new file mode 100644
index 000000000..559d7d4c0
--- /dev/null
+++ b/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsERHLCIntegrationTests.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2019-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.data.elasticsearch.core.suggest;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.elasticsearch.common.unit.Fuzziness;
+import org.elasticsearch.search.suggest.SuggestBuilder;
+import org.elasticsearch.search.suggest.SuggestBuilders;
+import org.elasticsearch.search.suggest.completion.CompletionSuggestionBuilder;
+import org.elasticsearch.search.suggest.completion.context.CategoryQueryContext;
+import org.elasticsearch.xcontent.ToXContent;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.data.elasticsearch.client.erhlc.NativeSearchQueryBuilder;
+import org.springframework.data.elasticsearch.core.query.Query;
+import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
+import org.springframework.data.elasticsearch.utils.IndexNameProvider;
+import org.springframework.test.context.ContextConfiguration;
+
+/**
+ * @author Peter-Josef Meisch
+ */
+@SuppressWarnings("deprecation")
+@ContextConfiguration(classes = { CompletionWithContextsERHLCIntegrationTests.Config.class })
+public class CompletionWithContextsERHLCIntegrationTests extends CompletionWithContextsIntegrationTests {
+ @Configuration
+ @Import({ ElasticsearchRestTemplateConfiguration.class })
+ static class Config {
+ @Bean
+ IndexNameProvider indexNameProvider() {
+ return new IndexNameProvider("completion-context-es7");
+ }
+ }
+
+ @Override
+ @NotNull
+ protected Query getSearchQuery(String suggestionName, String category) {
+
+ CompletionSuggestionBuilder completionSuggestionFuzzyBuilder = SuggestBuilders.completionSuggestion("suggest")
+ .prefix("m", Fuzziness.AUTO);
+
+ Map> contextMap = new HashMap<>();
+ List contexts = new ArrayList<>(1);
+
+ CategoryQueryContext queryContext = CategoryQueryContext.builder().setCategory(category).build();
+ contexts.add(queryContext);
+ contextMap.put(ContextCompletionEntity.LANGUAGE_CATEGORY, contexts);
+
+ completionSuggestionFuzzyBuilder.contexts(contextMap);
+
+ var suggestBuilder = new SuggestBuilder().addSuggestion(suggestionName, completionSuggestionFuzzyBuilder);
+ return new NativeSearchQueryBuilder().withSuggestBuilder(suggestBuilder).build();
+ }
+
+}
diff --git a/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsIntegrationTests.java
index 50dbc4524..41fbdd4e5 100644
--- a/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsIntegrationTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsIntegrationTests.java
@@ -15,38 +15,25 @@
*/
package org.springframework.data.elasticsearch.core.suggest;
-import static org.assertj.core.api.Assertions.*;
+import static org.assertj.core.api.Assertions.assertThat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
-import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.common.unit.Fuzziness;
-import org.elasticsearch.search.suggest.SuggestBuilder;
-import org.elasticsearch.search.suggest.SuggestBuilders;
-import org.elasticsearch.search.suggest.SuggestionBuilder;
-import org.elasticsearch.search.suggest.completion.CompletionSuggestion;
-import org.elasticsearch.search.suggest.completion.CompletionSuggestionBuilder;
-import org.elasticsearch.search.suggest.completion.context.CategoryQueryContext;
-import org.elasticsearch.xcontent.ToXContent;
-import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.CompletionContext;
import org.springframework.data.elasticsearch.annotations.CompletionField;
import org.springframework.data.elasticsearch.annotations.Document;
-import org.springframework.data.elasticsearch.client.erhlc.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
-import org.springframework.data.elasticsearch.core.IndexOperations;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
+import org.springframework.data.elasticsearch.core.query.Query;
+import org.springframework.data.elasticsearch.core.suggest.response.Suggest;
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
-import org.springframework.data.elasticsearch.utils.IndexInitializer;
+import org.springframework.data.elasticsearch.utils.IndexNameProvider;
import org.springframework.lang.Nullable;
/**
@@ -56,24 +43,25 @@ import org.springframework.lang.Nullable;
@SpringIntegrationTest
public abstract class CompletionWithContextsIntegrationTests {
+ private static final String SUGGESTION_NAME = "test-suggest";
+
@Autowired private ElasticsearchOperations operations;
- private IndexOperations indexOperations;
+ @Autowired private IndexNameProvider indexNameProvider;
@BeforeEach
void setup() {
- indexOperations = operations.indexOps(ContextCompletionEntity.class);
- indexOperations.delete();
+ indexNameProvider.increment();
+ operations.indexOps(ContextCompletionEntity.class).createWithMapping();
}
- @AfterEach
- void after() {
- indexOperations.delete();
+ @Test
+ @Order(java.lang.Integer.MAX_VALUE)
+ void cleanup() {
+ operations.indexOps(IndexCoordinates.of(indexNameProvider.getPrefix() + "*")).delete();
}
private void loadContextCompletionObjectEntities() {
- IndexInitializer.init(indexOperations);
-
NonDocumentEntity nonDocumentEntity = new NonDocumentEntity();
nonDocumentEntity.setSomeField1("foo");
nonDocumentEntity.setSomeField2("bar");
@@ -100,105 +88,74 @@ public abstract class CompletionWithContextsIntegrationTests {
indexQueries.add(new ContextCompletionEntityBuilder("4").name("Artur Konczak")
.suggest(new String[] { "Artur", "Konczak" }, context4).buildIndex());
- operations.bulkIndex(indexQueries, IndexCoordinates.of("test-index-context-completion"));
+ operations.bulkIndex(indexQueries, IndexCoordinates.of(indexNameProvider.indexName()));
operations.indexOps(ContextCompletionEntity.class).refresh();
}
+ abstract protected Query getSearchQuery(String suggestionName, String category);
+
@Test // DATAES-536
public void shouldFindSuggestionsForGivenCriteriaQueryUsingContextCompletionEntityOfMongo() {
- // given
loadContextCompletionObjectEntities();
- CompletionSuggestionBuilder completionSuggestionFuzzyBuilder = SuggestBuilders.completionSuggestion("suggest")
- .prefix("m", Fuzziness.AUTO);
+ Query query = getSearchQuery(SUGGESTION_NAME, "mongo");
- Map> contextMap = new HashMap<>();
- List contexts = new ArrayList<>(1);
+ var searchHits = operations.search(query, ContextCompletionEntity.class);
- CategoryQueryContext.Builder builder = CategoryQueryContext.builder();
- builder.setCategory("mongo");
- CategoryQueryContext queryContext = builder.build();
- contexts.add(queryContext);
- contextMap.put(ContextCompletionEntity.LANGUAGE_CATEGORY, contexts);
-
- completionSuggestionFuzzyBuilder.contexts(contextMap);
-
- // when
- SearchResponse suggestResponse = ((ElasticsearchRestTemplate) operations).suggest(
- new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder),
- IndexCoordinates.of("test-index-context-completion"));
- assertThat(suggestResponse.getSuggest()).isNotNull();
- CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest");
- List options = completionSuggestion.getEntries().get(0).getOptions();
-
- // then
+ assertThat(searchHits.hasSuggest()).isTrue();
+ Suggest suggest = searchHits.getSuggest();
+ Suggest.Suggestion extends Suggest.Suggestion.Entry extends Suggest.Suggestion.Entry.Option>> suggestion = suggest
+ .getSuggestion(SUGGESTION_NAME);
+ assertThat(suggestion).isNotNull();
+ assertThat(suggestion)
+ .isInstanceOf(org.springframework.data.elasticsearch.core.suggest.response.CompletionSuggestion.class);
+ List> options = ((org.springframework.data.elasticsearch.core.suggest.response.CompletionSuggestion) suggestion)
+ .getEntries().get(0).getOptions();
assertThat(options).hasSize(1);
- assertThat(options.get(0).getText().string()).isEqualTo("Marchand");
+ assertThat(options.get(0).getText()).isEqualTo("Marchand");
}
@Test // DATAES-536
public void shouldFindSuggestionsForGivenCriteriaQueryUsingContextCompletionEntityOfElastic() {
- // given
loadContextCompletionObjectEntities();
- SuggestionBuilder completionSuggestionFuzzyBuilder = SuggestBuilders.completionSuggestion("suggest").prefix("m",
- Fuzziness.AUTO);
+ Query query = getSearchQuery(SUGGESTION_NAME, "elastic");
- Map> contextMap = new HashMap<>();
- List contexts = new ArrayList<>(1);
+ var searchHits = operations.search(query, ContextCompletionEntity.class);
- CategoryQueryContext.Builder builder = CategoryQueryContext.builder();
- builder.setCategory("elastic");
- CategoryQueryContext queryContext = builder.build();
- contexts.add(queryContext);
- contextMap.put(ContextCompletionEntity.LANGUAGE_CATEGORY, contexts);
-
- ((CompletionSuggestionBuilder) completionSuggestionFuzzyBuilder).contexts(contextMap);
-
- // when
- SearchResponse suggestResponse = ((ElasticsearchRestTemplate) operations).suggest(
- new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder),
- IndexCoordinates.of("test-index-context-completion"));
- assertThat(suggestResponse.getSuggest()).isNotNull();
- CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest");
- List options = completionSuggestion.getEntries().get(0).getOptions();
-
- // then
+ assertThat(searchHits.hasSuggest()).isTrue();
+ Suggest suggest = searchHits.getSuggest();
+ Suggest.Suggestion extends Suggest.Suggestion.Entry extends Suggest.Suggestion.Entry.Option>> suggestion = suggest
+ .getSuggestion(SUGGESTION_NAME);
+ assertThat(suggestion).isNotNull();
+ assertThat(suggestion)
+ .isInstanceOf(org.springframework.data.elasticsearch.core.suggest.response.CompletionSuggestion.class);
+ List> options = ((org.springframework.data.elasticsearch.core.suggest.response.CompletionSuggestion) suggestion)
+ .getEntries().get(0).getOptions();
assertThat(options).hasSize(1);
- assertThat(options.get(0).getText().string()).isEqualTo("Mohsin");
+ assertThat(options.get(0).getText()).isEqualTo("Mohsin");
}
@Test // DATAES-536
public void shouldFindSuggestionsForGivenCriteriaQueryUsingContextCompletionEntityOfKotlin() {
- // given
loadContextCompletionObjectEntities();
- SuggestionBuilder completionSuggestionFuzzyBuilder = SuggestBuilders.completionSuggestion("suggest").prefix("m",
- Fuzziness.AUTO);
+ Query query = getSearchQuery(SUGGESTION_NAME, "kotlin");
- Map> contextMap = new HashMap<>();
- List contexts = new ArrayList<>(1);
+ var searchHits = operations.search(query, ContextCompletionEntity.class);
- CategoryQueryContext.Builder builder = CategoryQueryContext.builder();
- builder.setCategory("kotlin");
- CategoryQueryContext queryContext = builder.build();
- contexts.add(queryContext);
- contextMap.put(ContextCompletionEntity.LANGUAGE_CATEGORY, contexts);
-
- ((CompletionSuggestionBuilder) completionSuggestionFuzzyBuilder).contexts(contextMap);
-
- // when
- SearchResponse suggestResponse = ((ElasticsearchRestTemplate) operations).suggest(
- new SuggestBuilder().addSuggestion("test-suggest", completionSuggestionFuzzyBuilder),
- IndexCoordinates.of("test-index-context-completion"));
- assertThat(suggestResponse.getSuggest()).isNotNull();
- CompletionSuggestion completionSuggestion = suggestResponse.getSuggest().getSuggestion("test-suggest");
- List options = completionSuggestion.getEntries().get(0).getOptions();
-
- // then
+ assertThat(searchHits.hasSuggest()).isTrue();
+ Suggest suggest = searchHits.getSuggest();
+ Suggest.Suggestion extends Suggest.Suggestion.Entry extends Suggest.Suggestion.Entry.Option>> suggestion = suggest
+ .getSuggestion(SUGGESTION_NAME);
+ assertThat(suggestion).isNotNull();
+ assertThat(suggestion)
+ .isInstanceOf(org.springframework.data.elasticsearch.core.suggest.response.CompletionSuggestion.class);
+ List> options = ((org.springframework.data.elasticsearch.core.suggest.response.CompletionSuggestion) suggestion)
+ .getEntries().get(0).getOptions();
assertThat(options).hasSize(2);
- assertThat(options.get(0).getText().string()).isIn("Marchand", "Mohsin");
- assertThat(options.get(1).getText().string()).isIn("Marchand", "Mohsin");
+ assertThat(options.get(0).getText()).isIn("Marchand", "Mohsin");
+ assertThat(options.get(1).getText()).isIn("Marchand", "Mohsin");
}
/**
@@ -235,7 +192,7 @@ public abstract class CompletionWithContextsIntegrationTests {
* @author Mewes Kochheim
* @author Robert Gruendler
*/
- @Document(indexName = "test-index-context-completion")
+ @Document(indexName = "#{@indexNameProvider.indexName()}")
static class ContextCompletionEntity {
public static final String LANGUAGE_CATEGORY = "language";
diff --git a/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsRestTemplateIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsRestTemplateIntegrationTests.java
deleted file mode 100644
index 44a2c5a45..000000000
--- a/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsRestTemplateIntegrationTests.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2019-2023 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.data.elasticsearch.core.suggest;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
-import org.springframework.test.context.ContextConfiguration;
-
-/**
- * @author Peter-Josef Meisch
- */
-@ContextConfiguration(classes = { CompletionWithContextsRestTemplateIntegrationTests.Config.class })
-public class CompletionWithContextsRestTemplateIntegrationTests extends CompletionWithContextsIntegrationTests {
- @Configuration
- @Import({ ElasticsearchRestTemplateConfiguration.class })
- static class Config {}
-}
diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryELCIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryELCIntegrationTests.java
index aed063b98..159edcf2a 100644
--- a/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryELCIntegrationTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryELCIntegrationTests.java
@@ -18,7 +18,7 @@ package org.springframework.data.elasticsearch.repositories.setting.dynamic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
-import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
+import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.data.elasticsearch.utils.IndexNameProvider;
import org.springframework.test.context.ContextConfiguration;
@@ -32,7 +32,7 @@ public class DynamicSettingAndMappingEntityRepositoryELCIntegrationTests
extends DynamicSettingAndMappingEntityRepositoryIntegrationTests {
@Configuration
- @Import({ ElasticsearchRestTemplateConfiguration.class })
+ @Import({ ElasticsearchTemplateConfiguration.class })
@EnableElasticsearchRepositories(considerNestedRepositories = true)
static class Config {
@Bean
diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryIntegrationTests.java
index 5714085d1..f73dc6a73 100644
--- a/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryIntegrationTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/repositories/setting/dynamic/DynamicSettingAndMappingEntityRepositoryIntegrationTests.java
@@ -71,7 +71,7 @@ public abstract class DynamicSettingAndMappingEntityRepositoryIntegrationTests {
public void shouldCreateGivenDynamicSettingsForGivenIndex() {
assertThat(indexOperations.exists()).isTrue();
- Map map = indexOperations.getSettings();
+ Map map = indexOperations.getSettings().flatten();
assertThat(map.containsKey("index.number_of_replicas")).isTrue();
assertThat(map.containsKey("index.number_of_shards")).isTrue();
assertThat(map.containsKey("index.analysis.analyzer.emailAnalyzer.tokenizer")).isTrue();
diff --git a/src/test/java/org/springframework/data/elasticsearch/utils/IndexInitializer.java b/src/test/java/org/springframework/data/elasticsearch/utils/IndexInitializer.java
deleted file mode 100644
index a145fa1fe..000000000
--- a/src/test/java/org/springframework/data/elasticsearch/utils/IndexInitializer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2019-2023 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.data.elasticsearch.utils;
-
-import org.springframework.data.elasticsearch.core.IndexOperations;
-
-/**
- * Utility to initialize indexes.
- *
- * @author Peter-Josef Meisch
- */
-public class IndexInitializer {
-
- private IndexInitializer() {}
-
- /**
- * Initialize a fresh index with mappings for {@link Class}. Drops the index if it exists before creation.
- *
- * @param indexOperations
- */
- public static void init(IndexOperations indexOperations) {
- indexOperations.delete();
- indexOperations.create();
- indexOperations.putMapping(indexOperations.createMapping());
- indexOperations.refresh();
- }
-}