committed by
GitHub
parent
c6b2276029
commit
44a669d66c
@@ -39,6 +39,7 @@ import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -75,6 +76,10 @@ import org.springframework.data.elasticsearch.annotations.MultiField;
|
||||
import org.springframework.data.elasticsearch.annotations.Score;
|
||||
import org.springframework.data.elasticsearch.annotations.ScriptedField;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasAction;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasActionParameters;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasActions;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasData;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.*;
|
||||
import org.springframework.data.util.StreamUtils;
|
||||
@@ -215,7 +220,7 @@ public abstract class ElasticsearchTemplateTests {
|
||||
assertThat(sampleEntity1).isEqualTo(sampleEntity);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Test // DATAES-52
|
||||
public void shouldReturnObjectsForGivenIdsUsingMultiGet() {
|
||||
|
||||
// given
|
||||
@@ -277,7 +282,7 @@ public abstract class ElasticsearchTemplateTests {
|
||||
assertThat(sampleEntities.get(2)).isEqualTo(sampleEntity2);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Test // DATAES-52
|
||||
public void shouldReturnObjectsForGivenIdsUsingMultiGetWithFields() {
|
||||
|
||||
// given
|
||||
@@ -2739,6 +2744,54 @@ public abstract class ElasticsearchTemplateTests {
|
||||
assertThat(aliases.get(0).alias()).isEqualTo(aliasName);
|
||||
}
|
||||
|
||||
@Test // DATAES-864
|
||||
void shouldAddAliasesWithAliasActions() {
|
||||
|
||||
AliasActions aliasActions = new AliasActions();
|
||||
aliasActions.add(new AliasAction.Add(AliasActionParameters.builder()
|
||||
.withIndices(indexOperations.getIndexCoordinates().getIndexNames()).withAliases("aliasA", "aliasB").build()));
|
||||
|
||||
indexOperations.alias(aliasActions);
|
||||
|
||||
List<AliasMetaData> aliases = indexOperations.queryForAlias();
|
||||
assertThat(aliases).hasSize(2);
|
||||
assertThat(aliases.stream().map(AliasMetaData::alias).collect(Collectors.toList())).contains("aliasA", "aliasB");
|
||||
}
|
||||
|
||||
@Test // DATAES-864
|
||||
void shouldRemoveAliasesWithAliasActions() {
|
||||
|
||||
AliasActions aliasActions = new AliasActions();
|
||||
aliasActions.add(new AliasAction.Add(AliasActionParameters.builder()
|
||||
.withIndices(indexOperations.getIndexCoordinates().getIndexNames()).withAliases("aliasA", "aliasB").build()));
|
||||
|
||||
indexOperations.alias(aliasActions);
|
||||
|
||||
aliasActions = new AliasActions();
|
||||
aliasActions.add(new AliasAction.Remove(AliasActionParameters.builder()
|
||||
.withIndices(indexOperations.getIndexCoordinates().getIndexNames()).withAliases("aliasA", "aliasB").build()));
|
||||
|
||||
indexOperations.alias(aliasActions);
|
||||
|
||||
List<AliasMetaData> aliases = indexOperations.queryForAlias();
|
||||
assertThat(aliases).hasSize(0);
|
||||
}
|
||||
|
||||
@Test // DATAES-864
|
||||
void shouldGetAliasData() {
|
||||
AliasActions aliasActions = new AliasActions();
|
||||
aliasActions.add(new AliasAction.Add(AliasActionParameters.builder()
|
||||
.withIndices(indexOperations.getIndexCoordinates().getIndexNames()).withAliases("aliasA", "aliasB").build()));
|
||||
|
||||
indexOperations.alias(aliasActions);
|
||||
|
||||
Map<String, Set<AliasData>> aliasDatas = indexOperations.getAliases("aliasA");
|
||||
|
||||
Set<AliasData> aliasData = aliasDatas.get(indexOperations.getIndexCoordinates().getIndexName());
|
||||
|
||||
assertThat(aliasData.stream().map(AliasData::getAlias)).containsExactly("aliasA");
|
||||
}
|
||||
|
||||
@Test // DATAES-70
|
||||
public void shouldAddAliasForVariousRoutingValues() {
|
||||
|
||||
|
||||
@@ -19,9 +19,11 @@ import static org.assertj.core.api.Assertions.*;
|
||||
import static org.skyscreamer.jsonassert.JSONAssert.*;
|
||||
|
||||
import lombok.Data;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.test.StepVerifier;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Set;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
@@ -38,6 +40,10 @@ import org.springframework.data.elasticsearch.annotations.Field;
|
||||
import org.springframework.data.elasticsearch.annotations.FieldType;
|
||||
import org.springframework.data.elasticsearch.annotations.Mapping;
|
||||
import org.springframework.data.elasticsearch.annotations.Setting;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasAction;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasActionParameters;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasActions;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasData;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ReactiveElasticsearchRestTemplateConfiguration;
|
||||
@@ -333,6 +339,45 @@ public class ReactiveIndexOperationsTest {
|
||||
}).verifyComplete();
|
||||
}
|
||||
|
||||
@Test // DATAES-864
|
||||
void shouldCreateAlias() {
|
||||
|
||||
ReactiveIndexOperations indexOps = operations.indexOps(Entity.class);
|
||||
|
||||
AliasActions aliasActions = new AliasActions();
|
||||
aliasActions.add(new AliasAction.Add(AliasActionParameters.builder()
|
||||
.withIndices(indexOps.getIndexCoordinates().getIndexNames()).withAliases("aliasA", "aliasB").build()));
|
||||
|
||||
indexOps.create().flatMap(success -> {
|
||||
if (success) {
|
||||
return indexOps.alias(aliasActions);
|
||||
} else {
|
||||
return Mono.just(false);
|
||||
}
|
||||
}).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
}
|
||||
|
||||
@Test // DATAES-864
|
||||
void shouldGetAliasData() {
|
||||
|
||||
ReactiveIndexOperations indexOps = operations.indexOps(Entity.class);
|
||||
|
||||
AliasActions aliasActions = new AliasActions();
|
||||
aliasActions.add(new AliasAction.Add(AliasActionParameters.builder()
|
||||
.withIndices(indexOps.getIndexCoordinates().getIndexNames()).withAliases("aliasA", "aliasB").build()));
|
||||
|
||||
assertThat(indexOps.create().block()).isTrue();
|
||||
assertThat(indexOps.alias(aliasActions).block()).isTrue();
|
||||
|
||||
indexOps.getAliases("aliasA") //
|
||||
.as(StepVerifier::create) //
|
||||
.assertNext(aliasDatas -> { //
|
||||
Set<AliasData> aliasData = aliasDatas.get(indexOps.getIndexCoordinates().getIndexName());
|
||||
assertThat(aliasData.stream().map(AliasData::getAlias)).containsExactly("aliasA");
|
||||
}) //
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
@Data
|
||||
@Document(indexName = TESTINDEX, shards = 3, replicas = 2, refreshInterval = "4s")
|
||||
static class Entity {
|
||||
|
||||
@@ -20,9 +20,11 @@ import static org.elasticsearch.index.query.QueryBuilders.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.skyscreamer.jsonassert.JSONAssert.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
|
||||
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
|
||||
import org.elasticsearch.action.index.IndexAction;
|
||||
import org.elasticsearch.action.index.IndexRequest;
|
||||
import org.elasticsearch.action.index.IndexRequestBuilder;
|
||||
@@ -30,6 +32,9 @@ import org.elasticsearch.action.search.SearchAction;
|
||||
import org.elasticsearch.action.search.SearchRequest;
|
||||
import org.elasticsearch.action.search.SearchRequestBuilder;
|
||||
import org.elasticsearch.client.Client;
|
||||
import org.elasticsearch.common.xcontent.ToXContent;
|
||||
import org.elasticsearch.common.xcontent.XContentHelper;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.json.JSONException;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -43,6 +48,9 @@ import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.elasticsearch.annotations.Field;
|
||||
import org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverter;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasAction;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasActionParameters;
|
||||
import org.springframework.data.elasticsearch.core.index.AliasActions;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext;
|
||||
import org.springframework.data.elasticsearch.core.query.Criteria;
|
||||
@@ -250,6 +258,123 @@ class RequestFactoryTests {
|
||||
assertThat(builder.request().source().seqNoAndPrimaryTerm()).isNull();
|
||||
}
|
||||
|
||||
@Test // DATAES-864
|
||||
void shouldBuildIndicesAliasRequest() throws IOException, JSONException {
|
||||
|
||||
AliasActions aliasActions = new AliasActions();
|
||||
|
||||
aliasActions.add(new AliasAction.Add(
|
||||
AliasActionParameters.builder().withIndices("index1", "index2").withAliases("alias1").build()));
|
||||
aliasActions.add(
|
||||
new AliasAction.Remove(AliasActionParameters.builder().withIndices("index3").withAliases("alias1").build()));
|
||||
|
||||
aliasActions.add(new AliasAction.RemoveIndex(AliasActionParameters.builder().withIndices("index3").build()));
|
||||
|
||||
aliasActions.add(new AliasAction.Add(AliasActionParameters.builder().withIndices("index4").withAliases("alias4")
|
||||
.withRouting("routing").withIndexRouting("indexRouting").withSearchRouting("searchRouting").withIsHidden(true)
|
||||
.withIsWriteIndex(true).build()));
|
||||
|
||||
Query query = new CriteriaQuery(new Criteria("lastName").is("Smith"));
|
||||
aliasActions.add(new AliasAction.Add(AliasActionParameters.builder().withIndices("index5").withAliases("alias5")
|
||||
.withFilterQuery(query, Person.class).build()));
|
||||
|
||||
String expected = "{\n" + //
|
||||
" \"actions\": [\n" + //
|
||||
" {\n" + //
|
||||
" \"add\": {\n" + //
|
||||
" \"indices\": [\n" + //
|
||||
" \"index1\",\n" + //
|
||||
" \"index2\"\n" + //
|
||||
" ],\n" + //
|
||||
" \"aliases\": [\n" + //
|
||||
" \"alias1\"\n" + //
|
||||
" ]\n" + //
|
||||
" }\n" + //
|
||||
" },\n" + //
|
||||
" {\n" + //
|
||||
" \"remove\": {\n" + //
|
||||
" \"indices\": [\n" + //
|
||||
" \"index3\"\n" + //
|
||||
" ],\n" + //
|
||||
" \"aliases\": [\n" + //
|
||||
" \"alias1\"\n" + //
|
||||
" ]\n" + //
|
||||
" }\n" + //
|
||||
" },\n" + //
|
||||
" {\n" + //
|
||||
" \"remove_index\": {\n" + //
|
||||
" \"indices\": [\n" + //
|
||||
" \"index3\"\n" + //
|
||||
" ]\n" + //
|
||||
" }\n" + //
|
||||
" },\n" + //
|
||||
" {\n" + //
|
||||
" \"add\": {\n" + //
|
||||
" \"indices\": [\n" + //
|
||||
" \"index4\"\n" + //
|
||||
" ],\n" + //
|
||||
" \"aliases\": [\n" + //
|
||||
" \"alias4\"\n" + //
|
||||
" ],\n" + //
|
||||
" \"routing\": \"routing\",\n" + //
|
||||
" \"index_routing\": \"indexRouting\",\n" + //
|
||||
" \"search_routing\": \"searchRouting\",\n" + //
|
||||
" \"is_write_index\": true,\n" + //
|
||||
" \"is_hidden\": true\n" + //
|
||||
" }\n" + //
|
||||
" },\n" + //
|
||||
" {\n" + //
|
||||
" \"add\": {\n" + //
|
||||
" \"indices\": [\n" + //
|
||||
" \"index5\"\n" + //
|
||||
" ],\n" + //
|
||||
" \"aliases\": [\n" + //
|
||||
" \"alias5\"\n" + //
|
||||
" ],\n" + //
|
||||
" \"filter\": {\n" + //
|
||||
" \"bool\": {\n" + //
|
||||
" \"must\": [\n" + //
|
||||
" {\n" + //
|
||||
" \"query_string\": {\n" + //
|
||||
" \"query\": \"Smith\",\n" + //
|
||||
" \"fields\": [\n" + //
|
||||
" \"last-name^1.0\"\n" + //
|
||||
" ],\n" + //
|
||||
" \"type\": \"best_fields\",\n" + //
|
||||
" \"default_operator\": \"and\",\n" + //
|
||||
" \"max_determinized_states\": 10000,\n" + //
|
||||
" \"enable_position_increments\": true,\n" + //
|
||||
" \"fuzziness\": \"AUTO\",\n" + //
|
||||
" \"fuzzy_prefix_length\": 0,\n" + //
|
||||
" \"fuzzy_max_expansions\": 50,\n" + //
|
||||
" \"phrase_slop\": 0,\n" + //
|
||||
" \"escape\": false,\n" + //
|
||||
" \"auto_generate_synonyms_phrase_query\": true,\n" + //
|
||||
" \"fuzzy_transpositions\": true,\n" + //
|
||||
" \"boost\": 1.0\n" + //
|
||||
" }\n" + //
|
||||
" }\n" + //
|
||||
" ],\n" + //
|
||||
" \"adjust_pure_negative\": true,\n" + //
|
||||
" \"boost\": 1.0\n" + //
|
||||
" }\n" + //
|
||||
" }\n" + //
|
||||
" }\n" + //
|
||||
" }\n" + //
|
||||
" ]\n" + //
|
||||
"}"; //
|
||||
|
||||
IndicesAliasesRequest indicesAliasesRequest = requestFactory.indicesAliasesRequest(aliasActions);
|
||||
|
||||
String json = requestToString(indicesAliasesRequest);
|
||||
|
||||
assertEquals(expected, json, false);
|
||||
}
|
||||
|
||||
private String requestToString(ToXContent request) throws IOException {
|
||||
return XContentHelper.toXContent(request, XContentType.JSON, true).utf8ToString();
|
||||
}
|
||||
|
||||
static class Person {
|
||||
@Nullable @Id String id;
|
||||
@Nullable @Field(name = "last-name") String lastName;
|
||||
|
||||
Reference in New Issue
Block a user