Skip to content

Commit 9e97dec

Browse files
committed
DATAES-70 - Alias creation with routing not supported
added routing parameters
1 parent 3453f30 commit 9e97dec

File tree

5 files changed

+163
-11
lines changed

5 files changed

+163
-11
lines changed

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static org.apache.commons.lang.StringUtils.*;
2020
import static org.elasticsearch.action.search.SearchType.*;
2121
import static org.elasticsearch.client.Requests.*;
22+
import static org.elasticsearch.cluster.metadata.AliasAction.Type.ADD;
2223
import static org.elasticsearch.common.collect.Sets.*;
2324
import static org.elasticsearch.index.VersionType.*;
2425
import static org.springframework.data.elasticsearch.core.MappingBuilder.*;
@@ -53,6 +54,7 @@
5354
import org.elasticsearch.action.update.UpdateResponse;
5455
import org.elasticsearch.client.Client;
5556
import org.elasticsearch.client.Requests;
57+
import org.elasticsearch.cluster.metadata.AliasAction;
5658
import org.elasticsearch.cluster.metadata.MappingMetaData;
5759
import org.elasticsearch.common.collect.ImmutableOpenMap;
5860
import org.elasticsearch.common.collect.MapBuilder;
@@ -706,15 +708,19 @@ public <T> void refresh(Class<T> clazz, boolean waitForOperation) {
706708
public Boolean addAlias(AliasQuery query) {
707709
Assert.notNull(query.getIndexName(), "No index defined for Alias");
708710
Assert.notNull(query.getAliasName(), "No alias defined");
709-
IndicesAliasesRequestBuilder indicesAliasesRequestBuilder = null;
711+
AliasAction aliasAction = new AliasAction(ADD, query.getIndexName(), query.getAliasName());
710712
if (query.getFilterBuilder() != null) {
711-
indicesAliasesRequestBuilder = client.admin().indices().prepareAliases().addAlias(query.getIndexName(), query.getAliasName(), query.getFilterBuilder());
713+
aliasAction.filter(query.getFilterBuilder());
712714
} else if (query.getFilter() != null) {
713-
indicesAliasesRequestBuilder = client.admin().indices().prepareAliases().addAlias(query.getIndexName(), query.getAliasName(), query.getFilter());
714-
} else {
715-
indicesAliasesRequestBuilder = client.admin().indices().prepareAliases().addAlias(query.getIndexName(), query.getAliasName());
716-
}
717-
return indicesAliasesRequestBuilder.execute().actionGet().isAcknowledged();
715+
aliasAction.filter(query.getFilter());
716+
} else if (isNotBlank(query.getRouting())) {
717+
aliasAction.routing(query.getRouting());
718+
} else if (isNotBlank(query.getSearchRouting())) {
719+
aliasAction.searchRouting(query.getSearchRouting());
720+
} else if (isNotBlank(query.getIndexRouting())) {
721+
aliasAction.indexRouting(query.getIndexRouting());
722+
}
723+
return client.admin().indices().prepareAliases().addAliasAction(aliasAction).execute().actionGet().isAcknowledged();
718724
}
719725

720726
@Override

src/main/java/org/springframework/data/elasticsearch/core/query/AliasBuilder.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2013 the original author or authors.
2+
* Copyright 2013-2014 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -28,6 +28,9 @@ public class AliasBuilder {
2828
private String aliasName;
2929
private FilterBuilder filterBuilder;
3030
private Map<String, Object> filter;
31+
private String searchRouting;
32+
private String indexRouting;
33+
private String routing;
3134

3235
public AliasBuilder withIndexName(String indexName) {
3336
this.indexName = indexName;
@@ -49,12 +52,30 @@ public AliasBuilder withFilter(Map<String, Object> filter) {
4952
return this;
5053
}
5154

55+
public AliasBuilder withSearchRouting(String searchRouting) {
56+
this.searchRouting = searchRouting;
57+
return this;
58+
}
59+
60+
public AliasBuilder withIndexRouting(String indexRouting) {
61+
this.indexRouting = indexRouting;
62+
return this;
63+
}
64+
65+
public AliasBuilder withRouting(String routing) {
66+
this.routing = routing;
67+
return this;
68+
}
69+
5270
public AliasQuery build() {
5371
AliasQuery aliasQuery = new AliasQuery();
5472
aliasQuery.setIndexName(indexName);
5573
aliasQuery.setAliasName(aliasName);
5674
aliasQuery.setFilterBuilder(filterBuilder);
5775
aliasQuery.setFilter(filter);
76+
aliasQuery.setSearchRouting(searchRouting);
77+
aliasQuery.setIndexRouting(indexRouting);
78+
aliasQuery.setRouting(routing);
5879
return aliasQuery;
5980
}
6081
}

src/main/java/org/springframework/data/elasticsearch/core/query/AliasQuery.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2013 the original author or authors.
2+
* Copyright 2013-2014 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -30,6 +30,9 @@ public class AliasQuery {
3030
private String aliasName;
3131
private FilterBuilder filterBuilder;
3232
private Map<String, Object> filter;
33+
private String searchRouting;
34+
private String indexRouting;
35+
private String routing;
3336

3437
public String getIndexName() {
3538
return indexName;
@@ -62,4 +65,28 @@ public Map<String, Object> getFilter() {
6265
public void setFilter(Map<String, Object> filter) {
6366
this.filter = filter;
6467
}
68+
69+
public String getSearchRouting() {
70+
return searchRouting;
71+
}
72+
73+
public void setSearchRouting(String searchRouting) {
74+
this.searchRouting = searchRouting;
75+
}
76+
77+
public String getIndexRouting() {
78+
return indexRouting;
79+
}
80+
81+
public void setIndexRouting(String indexRouting) {
82+
this.indexRouting = indexRouting;
83+
}
84+
85+
public String getRouting() {
86+
return routing;
87+
}
88+
89+
public void setRouting(String routing) {
90+
this.routing = routing;
91+
}
6592
}

src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,104 @@ public void shouldRemoveAlias() {
927927
assertThat(aliases.size(), is(0));
928928
}
929929

930+
/*
931+
DATAES-70
932+
*/
933+
@Test
934+
public void shouldAddAliasWithGivenRoutingValue() {
935+
//given
936+
String indexName = INDEX_NAME;
937+
String alias = "test-alias";
938+
939+
AliasQuery aliasQuery = new AliasBuilder()
940+
.withIndexName(indexName)
941+
.withAliasName(alias)
942+
.withRouting("0").build();
943+
944+
//when
945+
elasticsearchTemplate.addAlias(aliasQuery);
946+
947+
String documentId = randomNumeric(5);
948+
SampleEntity sampleEntity = new SampleEntityBuilder(documentId)
949+
.message("some message")
950+
.version(System.currentTimeMillis()).build();
951+
952+
IndexQuery indexQuery = new IndexQueryBuilder()
953+
.withIndexName(alias)
954+
.withId(sampleEntity.getId())
955+
.withObject(sampleEntity).build();
956+
957+
elasticsearchTemplate.index(indexQuery);
958+
elasticsearchTemplate.refresh(SampleEntity.class, true);
959+
960+
SearchQuery query = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
961+
.withIndices(alias).build();
962+
long count = elasticsearchTemplate.count(query, SampleEntity.class);
963+
//then
964+
Set<String> aliases = elasticsearchTemplate.queryForAlias(INDEX_NAME);
965+
assertThat(aliases, is(notNullValue()));
966+
assertThat(aliases.contains(alias), is(true));
967+
assertThat(count, is(1L));
968+
969+
//cleanup
970+
elasticsearchTemplate.removeAlias(aliasQuery);
971+
elasticsearchTemplate.refresh(SampleEntity.class, true);
972+
}
973+
974+
/*
975+
DATAES-70
976+
*/
977+
@Test
978+
public void shouldAddAliasForVariousRoutingValues() {
979+
//given
980+
String indexName = INDEX_NAME;
981+
String alias1 = "test-alias-1";
982+
String alias2 = "test-alias-2";
983+
984+
AliasQuery aliasQuery1 = new AliasBuilder()
985+
.withIndexName(indexName)
986+
.withAliasName(alias1)
987+
.withIndexRouting("0").build();
988+
989+
AliasQuery aliasQuery2 = new AliasBuilder()
990+
.withIndexName(indexName)
991+
.withAliasName(alias2)
992+
.withSearchRouting("1").build();
993+
994+
//when
995+
elasticsearchTemplate.addAlias(aliasQuery1);
996+
elasticsearchTemplate.addAlias(aliasQuery2);
997+
998+
String documentId = randomNumeric(5);
999+
SampleEntity sampleEntity = new SampleEntityBuilder(documentId)
1000+
.message("some message")
1001+
.version(System.currentTimeMillis()).build();
1002+
1003+
IndexQuery indexQuery = new IndexQueryBuilder()
1004+
.withIndexName(alias1)
1005+
.withId(sampleEntity.getId())
1006+
.withObject(sampleEntity).build();
1007+
1008+
elasticsearchTemplate.index(indexQuery);
1009+
elasticsearchTemplate.refresh(SampleEntity.class, true);
1010+
1011+
SearchQuery query = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
1012+
.withIndices(alias2).build();
1013+
long count = elasticsearchTemplate.count(query, SampleEntity.class);
1014+
// then
1015+
Set<String> aliases = elasticsearchTemplate.queryForAlias(INDEX_NAME);
1016+
assertThat(aliases, is(notNullValue()));
1017+
assertThat(aliases.contains(alias1), is(true));
1018+
assertThat(aliases.contains(alias2), is(true));
1019+
assertThat(count, is(0L));
1020+
1021+
//cleanup
1022+
elasticsearchTemplate.removeAlias(aliasQuery1);
1023+
elasticsearchTemplate.removeAlias(aliasQuery2);
1024+
elasticsearchTemplate.refresh(SampleEntity.class, true);
1025+
}
1026+
1027+
9301028

9311029
@Test
9321030
public void shouldIndexDocumentForSpecifiedSource() {
@@ -1402,7 +1500,7 @@ public void shouldCreateGivenSettingsForGivenIndex() {
14021500
assertThat(map.containsKey("index.store.type"), is(true));
14031501
assertThat((String) map.get("index.refresh_interval"), is("-1"));
14041502
assertThat((String) map.get("index.number_of_replicas"), is("0"));
1405-
assertThat((String) map.get("index.number_of_shards"), is("1"));
1503+
assertThat((String) map.get("index.number_of_shards"), is("2"));
14061504
assertThat((String) map.get("index.store.type"), is("memory"));
14071505
}
14081506

src/test/java/org/springframework/data/elasticsearch/entities/SampleEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
* @author Rizwan Idrees
2626
* @author Mohsin Husen
2727
*/
28-
@Document(indexName = "test-index", type = "test-type", indexStoreType = "memory", shards = 1, replicas = 0, refreshInterval = "-1")
28+
@Document(indexName = "test-index", type = "test-type", indexStoreType = "memory", shards = 2, replicas = 0, refreshInterval = "-1")
2929
public class SampleEntity {
3030

3131
@Id

0 commit comments

Comments
 (0)