Skip to content

Commit aa9c475

Browse files
dandonovscakonczak
authored andcommitted
DATAES-208 - Allow node configuration to honor the server settings in @document
1 parent 21ff7e5 commit aa9c475

File tree

6 files changed

+62
-9
lines changed

6 files changed

+62
-9
lines changed

src/main/java/org/springframework/data/elasticsearch/annotations/Document.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636

3737
String type() default "";
3838

39+
boolean useServerConfiguration() default false;
40+
3941
short shards() default 5;
4042

4143
short replicas() default 1;

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import org.elasticsearch.cluster.metadata.MappingMetaData;
6363
import org.elasticsearch.common.collect.ImmutableOpenMap;
6464
import org.elasticsearch.common.collect.MapBuilder;
65+
import org.elasticsearch.common.collect.Maps;
6566
import org.elasticsearch.common.unit.TimeValue;
6667
import org.elasticsearch.common.xcontent.XContentBuilder;
6768
import org.elasticsearch.index.query.FilterBuilder;
@@ -879,6 +880,10 @@ public <T> boolean createIndex(Class<T> clazz, Object settings) {
879880
}
880881

881882
private <T> Map getDefaultSettings(ElasticsearchPersistentEntity<T> persistentEntity) {
883+
884+
if (persistentEntity.isUseServerConfiguration())
885+
return Maps.newHashMap();
886+
882887
return new MapBuilder<String, String>().put("index.number_of_shards", String.valueOf(persistentEntity.getShards()))
883888
.put("index.number_of_replicas", String.valueOf(persistentEntity.getReplicas()))
884889
.put("index.refresh_interval", persistentEntity.getRefreshInterval())

src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchPersistentEntity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public interface ElasticsearchPersistentEntity<T> extends PersistentEntity<T, El
3434

3535
short getReplicas();
3636

37+
boolean isUseServerConfiguration();
38+
3739
String getRefreshInterval();
3840

3941
String getIndexStoreType();

src/main/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchPersistentEntity.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public class SimpleElasticsearchPersistentEntity<T> extends BasicPersistentEntit
5050

5151
private String indexName;
5252
private String indexType;
53+
private boolean useServerConfiguration;
5354
private short shards;
5455
private short replicas;
5556
private String refreshInterval;
@@ -68,12 +69,13 @@ public SimpleElasticsearchPersistentEntity(TypeInformation<T> typeInformation) {
6869
Document document = clazz.getAnnotation(Document.class);
6970
Assert.hasText(document.indexName(),
7071
" Unknown indexName. Make sure the indexName is defined. e.g @Document(indexName=\"foo\")");
71-
this.indexName = typeInformation.getType().getAnnotation(Document.class).indexName();
72+
this.indexName = document.indexName();
7273
this.indexType = hasText(document.type()) ? document.type() : clazz.getSimpleName().toLowerCase(Locale.ENGLISH);
73-
this.shards = typeInformation.getType().getAnnotation(Document.class).shards();
74-
this.replicas = typeInformation.getType().getAnnotation(Document.class).replicas();
75-
this.refreshInterval = typeInformation.getType().getAnnotation(Document.class).refreshInterval();
76-
this.indexStoreType = typeInformation.getType().getAnnotation(Document.class).indexStoreType();
74+
this.useServerConfiguration = document.useServerConfiguration();
75+
this.shards = document.shards();
76+
this.replicas = document.replicas();
77+
this.refreshInterval = document.refreshInterval();
78+
this.indexStoreType = document.indexStoreType();
7779
}
7880
if (clazz.isAnnotationPresent(Setting.class)) {
7981
this.settingPath = typeInformation.getType().getAnnotation(Setting.class).settingPath();
@@ -114,6 +116,11 @@ public short getReplicas() {
114116
return replicas;
115117
}
116118

119+
@Override
120+
public boolean isUseServerConfiguration() {
121+
return useServerConfiguration;
122+
}
123+
117124
@Override
118125
public String getRefreshInterval() {
119126
return refreshInterval;

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

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.elasticsearch.search.highlight.HighlightBuilder;
3535
import org.elasticsearch.search.sort.FieldSortBuilder;
3636
import org.elasticsearch.search.sort.SortOrder;
37+
import org.hamcrest.Matchers;
3738
import org.junit.Before;
3839
import org.junit.Ignore;
3940
import org.junit.Test;
@@ -46,10 +47,7 @@
4647
import org.springframework.data.elasticsearch.ElasticsearchException;
4748
import org.springframework.data.elasticsearch.annotations.Document;
4849
import org.springframework.data.elasticsearch.core.query.*;
49-
import org.springframework.data.elasticsearch.entities.HetroEntity1;
50-
import org.springframework.data.elasticsearch.entities.HetroEntity2;
51-
import org.springframework.data.elasticsearch.entities.SampleEntity;
52-
import org.springframework.data.elasticsearch.entities.SampleMappingEntity;
50+
import org.springframework.data.elasticsearch.entities.*;
5351
import org.springframework.data.util.CloseableIterator;
5452
import org.springframework.test.context.ContextConfiguration;
5553
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -79,6 +77,7 @@ public void before() {
7977
elasticsearchTemplate.createIndex(SampleEntity.class);
8078
elasticsearchTemplate.deleteIndex(INDEX_1_NAME);
8179
elasticsearchTemplate.deleteIndex(INDEX_2_NAME);
80+
elasticsearchTemplate.deleteIndex(UseServerConfigurationEntity.class);
8281
elasticsearchTemplate.refresh(SampleEntity.class, true);
8382
}
8483

@@ -535,8 +534,11 @@ public void shouldReturnObjectMatchingGivenStringQuery() {
535534
public void shouldCreateIndexGivenEntityClass() {
536535
// when
537536
boolean created = elasticsearchTemplate.createIndex(SampleEntity.class);
537+
final Map setting = elasticsearchTemplate.getSetting(SampleEntity.class);
538538
// then
539539
assertThat(created, is(true));
540+
assertThat(setting.get("index.number_of_shards"), Matchers.<Object>is("1"));
541+
assertThat(setting.get("index.number_of_replicas"), Matchers.<Object>is("0"));
540542
}
541543

542544
@Test
@@ -1901,6 +1903,18 @@ public <T> FacetedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pa
19011903
assertThat(page.getTotalElements(), is(2l));
19021904
}
19031905

1906+
@Test
1907+
public void shouldCreateIndexUsingServerDefaultConfiguration() {
1908+
//given
1909+
1910+
//when
1911+
boolean created = elasticsearchTemplate.createIndex(UseServerConfigurationEntity.class);
1912+
//then
1913+
assertThat(created, is(true));
1914+
final Map setting = elasticsearchTemplate.getSetting(UseServerConfigurationEntity.class);
1915+
assertThat(setting.get("index.number_of_shards"), Matchers.<Object>is("5"));
1916+
assertThat(setting.get("index.number_of_replicas"), Matchers.<Object>is("1"));
1917+
}
19041918

19051919
private IndexQuery getIndexQuery(SampleEntity sampleEntity) {
19061920
return new IndexQueryBuilder().withId(sampleEntity.getId()).withObject(sampleEntity).build();
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.springframework.data.elasticsearch.entities;
2+
3+
import lombok.*;
4+
import org.springframework.data.annotation.Id;
5+
import org.springframework.data.elasticsearch.annotations.Document;
6+
7+
/**
8+
* Created by akonczak on 12/12/2015.
9+
*/
10+
@Setter
11+
@Getter
12+
@NoArgsConstructor
13+
@AllArgsConstructor
14+
@Builder
15+
@Document(indexName = "test-index-server-configuration", type = "test-type", useServerConfiguration = true, indexStoreType = "memory", shards = 10, replicas = 10, refreshInterval = "-1")
16+
public class UseServerConfigurationEntity {
17+
18+
@Id
19+
private String id;
20+
21+
private String val;
22+
23+
}

0 commit comments

Comments
 (0)