Skip to content

Commit 8c31761

Browse files
committed
DATAES-8 : Add support for Index level configuration
1 parent e72521b commit 8c31761

File tree

9 files changed

+43
-10
lines changed

9 files changed

+43
-10
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,8 @@
3535

3636
String indexName();
3737
String type() default "";
38+
short shards() default 1;
39+
short replicas() default 5;
40+
String refreshInterval() default "1s";
3841
String indexStoreType() default "fs";
3942
}

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -382,9 +382,16 @@ private boolean indexExists(String indexName) {
382382
private <T> boolean createIndexWithSettings(Class<T> clazz) {
383383
ElasticsearchPersistentEntity<T> persistentEntity = getPersistentEntityFor(clazz);
384384
return client.admin().indices().create(Requests.createIndexRequest(persistentEntity.getIndexName()).
385-
settings(new MapBuilder<String, String>()
386-
.put("index.store.type", persistentEntity.getIndexStoreType())
387-
.map())).actionGet().acknowledged();
385+
settings(getSettings(persistentEntity))).actionGet().acknowledged();
386+
}
387+
388+
private <T> Map getSettings(ElasticsearchPersistentEntity<T> persistentEntity) {
389+
return new MapBuilder<String, String>()
390+
.put("index.number_of_shards", String.valueOf(persistentEntity.getShards()))
391+
.put("index.number_of_replicas", String.valueOf(persistentEntity.getReplicas()))
392+
.put("index.refresh_interval", persistentEntity.getRefreshInterval())
393+
.put("index.store.type", persistentEntity.getIndexStoreType())
394+
.map();
388395
}
389396

390397
private <T> SearchRequestBuilder prepareSearch(Query query, Class<T> clazz){

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ public interface ElasticsearchPersistentEntity<T> extends PersistentEntity<T, El
2727

2828
String getIndexName();
2929
String getIndexType();
30+
short getShards();
31+
short getReplicas();
32+
String getRefreshInterval();
3033
String getIndexStoreType();
3134
ElasticsearchPersistentProperty getVersionProperty();
3235
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ public class SimpleElasticsearchPersistentEntity<T> extends BasicPersistentEntit
4545
private final StandardEvaluationContext context;
4646
private String indexName;
4747
private String indexType;
48+
private short shards;
49+
private short replicas;
50+
private String refreshInterval;
4851
private String indexStoreType;
4952

5053
public SimpleElasticsearchPersistentEntity(TypeInformation<T> typeInformation) {
@@ -56,6 +59,9 @@ public SimpleElasticsearchPersistentEntity(TypeInformation<T> typeInformation) {
5659
Assert.hasText(document.indexName(), " Unknown indexName. Make sure the indexName is defined. e.g @Document(indexName=\"foo\")");
5760
this.indexName = typeInformation.getType().getAnnotation(Document.class).indexName();
5861
this.indexType = hasText(document.type())? document.type() : clazz.getSimpleName().toLowerCase(Locale.ENGLISH);
62+
this.shards = typeInformation.getType().getAnnotation(Document.class).shards();
63+
this.replicas = typeInformation.getType().getAnnotation(Document.class).replicas();
64+
this.refreshInterval = typeInformation.getType().getAnnotation(Document.class).refreshInterval();
5965
this.indexStoreType = typeInformation.getType().getAnnotation(Document.class).indexStoreType();
6066
}
6167
}
@@ -77,10 +83,26 @@ public String getIndexType() {
7783
return indexType;
7884
}
7985

86+
@Override
8087
public String getIndexStoreType() {
8188
return indexStoreType;
8289
}
8390

91+
@Override
92+
public short getShards() {
93+
return shards;
94+
}
95+
96+
@Override
97+
public short getReplicas() {
98+
return replicas;
99+
}
100+
101+
@Override
102+
public String getRefreshInterval() {
103+
return refreshInterval;
104+
}
105+
84106
@Override
85107
public void addPersistentProperty(ElasticsearchPersistentProperty property) {
86108
super.addPersistentProperty(property);

src/test/java/org/springframework/data/elasticsearch/Book.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
* @author Rizwan Idrees
2222
* @author Mohsin Husen
2323
*/
24-
@Document(indexName = "book",type = "book", indexStoreType = "memory")
24+
@Document(indexName = "book",type = "book", indexStoreType = "memory", shards = 1 , replicas = 0, refreshInterval = "-1" )
2525
public class Book {
2626

2727
@Id

src/test/java/org/springframework/data/elasticsearch/DoubleIDEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import org.springframework.data.elasticsearch.annotations.Document;
2121

2222

23-
@Document(indexName = "double-keyed-entity", type = "double-keyed-entity", indexStoreType = "memory")
23+
@Document(indexName = "double-keyed-entity", type = "double-keyed-entity", indexStoreType = "memory", shards = 1 , replicas = 0, refreshInterval = "-1")
2424
public class DoubleIDEntity {
2525

2626

src/test/java/org/springframework/data/elasticsearch/IntegerIDEntity.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@
1515
*/
1616
package org.springframework.data.elasticsearch;
1717

18-
import java.math.BigInteger;
19-
2018
import org.springframework.data.annotation.Id;
2119
import org.springframework.data.annotation.Version;
2220
import org.springframework.data.elasticsearch.annotations.Document;
2321

2422

25-
@Document(indexName = "integer-keyed-entity", type = "integer-keyed-entity", indexStoreType = "memory")
23+
@Document(indexName = "integer-keyed-entity", type = "integer-keyed-entity", indexStoreType = "memory", shards = 1 , replicas = 0, refreshInterval = "-1")
2624
public class IntegerIDEntity {
2725

2826

src/test/java/org/springframework/data/elasticsearch/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")
28+
@Document(indexName = "test-index", type = "test-type", indexStoreType = "memory", shards = 1 , replicas = 0, refreshInterval = "-1")
2929
public class SampleEntity {
3030

3131
@Id

src/test/java/org/springframework/data/elasticsearch/SampleMappingEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* @author Rizwan Idrees
2525
* @author Mohsin Husen
2626
*/
27-
@Document(indexName = "test-mapping", type = "mapping", indexStoreType = "memory")
27+
@Document(indexName = "test-mapping", type = "mapping", indexStoreType = "memory", shards = 1 , replicas = 0, refreshInterval = "-1")
2828
public class SampleMappingEntity {
2929

3030
@Id

0 commit comments

Comments
 (0)