diff --git a/src/main/java/org/springframework/data/elasticsearch/annotations/Document.java b/src/main/java/org/springframework/data/elasticsearch/annotations/Document.java index d25496eef..968295f4c 100644 --- a/src/main/java/org/springframework/data/elasticsearch/annotations/Document.java +++ b/src/main/java/org/springframework/data/elasticsearch/annotations/Document.java @@ -35,5 +35,8 @@ public @interface Document { String indexName(); String type() default ""; + short shards() default 1; + short replicas() default 5; + String refreshInterval() default "1s"; String indexStoreType() default "fs"; } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index 76e1f0060..c31f313ba 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -382,9 +382,16 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { private boolean createIndexWithSettings(Class clazz) { ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz); return client.admin().indices().create(Requests.createIndexRequest(persistentEntity.getIndexName()). - settings(new MapBuilder() - .put("index.store.type", persistentEntity.getIndexStoreType()) - .map())).actionGet().acknowledged(); + settings(getSettings(persistentEntity))).actionGet().acknowledged(); + } + + private Map getSettings(ElasticsearchPersistentEntity persistentEntity) { + return new MapBuilder() + .put("index.number_of_shards", String.valueOf(persistentEntity.getShards())) + .put("index.number_of_replicas", String.valueOf(persistentEntity.getReplicas())) + .put("index.refresh_interval", persistentEntity.getRefreshInterval()) + .put("index.store.type", persistentEntity.getIndexStoreType()) + .map(); } private SearchRequestBuilder prepareSearch(Query query, Class clazz){ diff --git a/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchPersistentEntity.java b/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchPersistentEntity.java index 067f2bc73..c4c637f45 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchPersistentEntity.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchPersistentEntity.java @@ -27,6 +27,9 @@ public interface ElasticsearchPersistentEntity extends PersistentEntity extends BasicPersistentEntit private final StandardEvaluationContext context; private String indexName; private String indexType; + private short shards; + private short replicas; + private String refreshInterval; private String indexStoreType; public SimpleElasticsearchPersistentEntity(TypeInformation typeInformation) { @@ -56,6 +59,9 @@ public class SimpleElasticsearchPersistentEntity extends BasicPersistentEntit Assert.hasText(document.indexName(), " Unknown indexName. Make sure the indexName is defined. e.g @Document(indexName=\"foo\")"); this.indexName = typeInformation.getType().getAnnotation(Document.class).indexName(); this.indexType = hasText(document.type())? document.type() : clazz.getSimpleName().toLowerCase(Locale.ENGLISH); + this.shards = typeInformation.getType().getAnnotation(Document.class).shards(); + this.replicas = typeInformation.getType().getAnnotation(Document.class).replicas(); + this.refreshInterval = typeInformation.getType().getAnnotation(Document.class).refreshInterval(); this.indexStoreType = typeInformation.getType().getAnnotation(Document.class).indexStoreType(); } } @@ -77,10 +83,26 @@ public class SimpleElasticsearchPersistentEntity extends BasicPersistentEntit return indexType; } + @Override public String getIndexStoreType() { return indexStoreType; } + @Override + public short getShards() { + return shards; + } + + @Override + public short getReplicas() { + return replicas; + } + + @Override + public String getRefreshInterval() { + return refreshInterval; + } + @Override public void addPersistentProperty(ElasticsearchPersistentProperty property) { super.addPersistentProperty(property); diff --git a/src/test/java/org/springframework/data/elasticsearch/Book.java b/src/test/java/org/springframework/data/elasticsearch/Book.java index b0bcefd0b..f35f436ef 100644 --- a/src/test/java/org/springframework/data/elasticsearch/Book.java +++ b/src/test/java/org/springframework/data/elasticsearch/Book.java @@ -21,7 +21,7 @@ import org.springframework.data.elasticsearch.annotations.Document; * @author Rizwan Idrees * @author Mohsin Husen */ -@Document(indexName = "book",type = "book", indexStoreType = "memory") +@Document(indexName = "book",type = "book", indexStoreType = "memory", shards = 1 , replicas = 0, refreshInterval = "-1" ) public class Book { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/DoubleIDEntity.java b/src/test/java/org/springframework/data/elasticsearch/DoubleIDEntity.java index fd6ff7355..988893024 100644 --- a/src/test/java/org/springframework/data/elasticsearch/DoubleIDEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/DoubleIDEntity.java @@ -20,7 +20,7 @@ import org.springframework.data.annotation.Version; import org.springframework.data.elasticsearch.annotations.Document; -@Document(indexName = "double-keyed-entity", type = "double-keyed-entity", indexStoreType = "memory") +@Document(indexName = "double-keyed-entity", type = "double-keyed-entity", indexStoreType = "memory", shards = 1 , replicas = 0, refreshInterval = "-1") public class DoubleIDEntity { diff --git a/src/test/java/org/springframework/data/elasticsearch/IntegerIDEntity.java b/src/test/java/org/springframework/data/elasticsearch/IntegerIDEntity.java index b6fe1dc07..843b367ba 100644 --- a/src/test/java/org/springframework/data/elasticsearch/IntegerIDEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/IntegerIDEntity.java @@ -15,14 +15,12 @@ */ package org.springframework.data.elasticsearch; -import java.math.BigInteger; - import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Version; import org.springframework.data.elasticsearch.annotations.Document; -@Document(indexName = "integer-keyed-entity", type = "integer-keyed-entity", indexStoreType = "memory") +@Document(indexName = "integer-keyed-entity", type = "integer-keyed-entity", indexStoreType = "memory", shards = 1 , replicas = 0, refreshInterval = "-1") public class IntegerIDEntity { diff --git a/src/test/java/org/springframework/data/elasticsearch/SampleEntity.java b/src/test/java/org/springframework/data/elasticsearch/SampleEntity.java index eaa19ad6b..15c474db2 100644 --- a/src/test/java/org/springframework/data/elasticsearch/SampleEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/SampleEntity.java @@ -25,7 +25,7 @@ import org.springframework.data.elasticsearch.annotations.Document; * @author Rizwan Idrees * @author Mohsin Husen */ -@Document(indexName = "test-index", type = "test-type", indexStoreType = "memory") +@Document(indexName = "test-index", type = "test-type", indexStoreType = "memory", shards = 1 , replicas = 0, refreshInterval = "-1") public class SampleEntity { @Id diff --git a/src/test/java/org/springframework/data/elasticsearch/SampleMappingEntity.java b/src/test/java/org/springframework/data/elasticsearch/SampleMappingEntity.java index 3822ca183..64ba065ea 100644 --- a/src/test/java/org/springframework/data/elasticsearch/SampleMappingEntity.java +++ b/src/test/java/org/springframework/data/elasticsearch/SampleMappingEntity.java @@ -24,7 +24,7 @@ import org.springframework.data.elasticsearch.annotations.Field; * @author Rizwan Idrees * @author Mohsin Husen */ -@Document(indexName = "test-mapping", type = "mapping", indexStoreType = "memory") +@Document(indexName = "test-mapping", type = "mapping", indexStoreType = "memory", shards = 1 , replicas = 0, refreshInterval = "-1") public class SampleMappingEntity { @Id