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 d9b58bd54..e494afaa9 100644 --- a/src/main/java/org/springframework/data/elasticsearch/annotations/Document.java +++ b/src/main/java/org/springframework/data/elasticsearch/annotations/Document.java @@ -24,6 +24,7 @@ import org.springframework.data.annotation.Persistent; * * @author Rizwan Idrees * @author Mohsin Husen + * @author Mason Chan */ @Persistent @@ -45,4 +46,6 @@ public @interface Document { String refreshInterval() default "1s"; String indexStoreType() default "fs"; + + boolean createIndex() default true; } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java index 8a86da9db..a0ad2c30c 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java @@ -18,6 +18,7 @@ package org.springframework.data.elasticsearch.core; import org.elasticsearch.action.update.UpdateResponse; import org.springframework.data.domain.Page; import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter; +import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity; import org.springframework.data.elasticsearch.core.query.*; import org.springframework.data.util.CloseableIterator; @@ -558,4 +559,7 @@ public interface ElasticsearchOperations { T query(SearchQuery query, ResultsExtractor resultsExtractor); + + + ElasticsearchPersistentEntity getPersistentEntityFor(Class clazz); } 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 6bb100997..2b9c0050d 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -104,6 +104,7 @@ import org.springframework.util.Assert; * @author Mohsin Husen * @author Artur Konczak * @author Kevin Leturc + * @author Mason Chan */ public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware { @@ -1026,7 +1027,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati return newHashSet(iterator); } - private ElasticsearchPersistentEntity getPersistentEntityFor(Class clazz) { + @Override + public ElasticsearchPersistentEntity getPersistentEntityFor(Class clazz) { Assert.isTrue(clazz.isAnnotationPresent(Document.class), "Unable to identify index name. " + clazz.getSimpleName() + " is not a Document. Make sure the document class is annotated with @Document(indexName=\"foo\")"); return elasticsearchConverter.getMappingContext().getPersistentEntity(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 dc6f44c8d..b3127ad7c 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 @@ -47,4 +47,6 @@ public interface ElasticsearchPersistentEntity extends PersistentEntity extends BasicPersistentEntit private String parentType; private ElasticsearchPersistentProperty parentIdProperty; private String settingPath; + private boolean createIndexAndMapping; public SimpleElasticsearchPersistentEntity(TypeInformation typeInformation) { super(typeInformation); @@ -76,6 +77,7 @@ public class SimpleElasticsearchPersistentEntity extends BasicPersistentEntit this.replicas = document.replicas(); this.refreshInterval = document.refreshInterval(); this.indexStoreType = document.indexStoreType(); + this.createIndexAndMapping = document.createIndex(); } if (clazz.isAnnotationPresent(Setting.class)) { this.settingPath = typeInformation.getType().getAnnotation(Setting.class).settingPath(); @@ -141,6 +143,11 @@ public class SimpleElasticsearchPersistentEntity extends BasicPersistentEntit return settingPath; } + @Override + public boolean isCreateIndexAndMapping() { + return createIndexAndMapping; + } + @Override public void addPersistentProperty(ElasticsearchPersistentProperty property) { super.addPersistentProperty(property); diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java index 502a13b0a..1e10c94ba 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java @@ -15,7 +15,7 @@ */ package org.springframework.data.elasticsearch.repository.support; -import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; +import static org.elasticsearch.index.query.QueryBuilders.*; import java.io.Serializable; import java.lang.reflect.ParameterizedType; @@ -30,19 +30,10 @@ import org.elasticsearch.index.query.QueryBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.InvalidDataAccessApiUsageException; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; +import org.springframework.data.domain.*; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.FacetedPage; -import org.springframework.data.elasticsearch.core.query.DeleteQuery; -import org.springframework.data.elasticsearch.core.query.GetQuery; -import org.springframework.data.elasticsearch.core.query.IndexQuery; -import org.springframework.data.elasticsearch.core.query.MoreLikeThisQuery; -import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; -import org.springframework.data.elasticsearch.core.query.SearchQuery; +import org.springframework.data.elasticsearch.core.query.*; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.util.Assert; @@ -78,8 +69,10 @@ public abstract class AbstractElasticsearchRepository stringIdsRepresentation(Iterable ids) { - Assert.notNull(ids, "ids can't be null."); - List stringIds = new ArrayList(); - for (ID id : ids) { - stringIds.add(stringIdRepresentation(id)); - } - return stringIds; - } + private List stringIdsRepresentation(Iterable ids) { + Assert.notNull(ids, "ids can't be null."); + List stringIds = new ArrayList(); + for (ID id : ids) { + stringIds.add(stringIdRepresentation(id)); + } + return stringIds; + } protected abstract String stringIdRepresentation(ID id); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java index 510f4536e..f5dcebe2b 100755 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java @@ -48,6 +48,7 @@ import org.springframework.data.elasticsearch.ElasticsearchException; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.core.query.*; import org.springframework.data.elasticsearch.entities.*; +import org.springframework.data.elasticsearch.repositories.existing.index.CreateIndexFalseEntity; import org.springframework.data.util.CloseableIterator; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -58,6 +59,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @author Franck Marchand * @author Abdul Mohammed * @author Kevin Leturc + * @author Mason Chan */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:elasticsearch-template-test.xml") diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseEntity.java b/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseEntity.java new file mode 100644 index 000000000..92a38791c --- /dev/null +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseEntity.java @@ -0,0 +1,17 @@ +package org.springframework.data.elasticsearch.repositories.existing.index; + +import org.springframework.data.annotation.Id; +import org.springframework.data.elasticsearch.annotations.Document; + +/** + * CreateIndexFalseEntity + * + * @author Mason Chan + */ + +@Document(indexName = "test-index", type = "test-type", createIndex = false) +public class CreateIndexFalseEntity { + @Id + private String id; + +} diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseRepository.java b/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseRepository.java new file mode 100644 index 000000000..035ad20e8 --- /dev/null +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseRepository.java @@ -0,0 +1,10 @@ +package org.springframework.data.elasticsearch.repositories.existing.index; + +import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; + +/** + * Created by akonczak on 16/12/2015. + */ +public interface CreateIndexFalseRepository extends ElasticsearchRepository { + +} diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseRepositoryTest.java b/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseRepositoryTest.java new file mode 100644 index 000000000..5f4cc670d --- /dev/null +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/existing/index/CreateIndexFalseRepositoryTest.java @@ -0,0 +1,34 @@ +package org.springframework.data.elasticsearch.repositories.existing.index; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration("classpath:/existing-index-repository-test.xml") +public class CreateIndexFalseRepositoryTest { + + @Autowired + private CreateIndexFalseRepository repository; + + @Autowired + private ElasticsearchTemplate elasticsearchTemplate; + + + /* + DATAES-143 + */ + @Test + public void shouldNotCreateIndex() { + //given + + //when + //then + assertFalse(elasticsearchTemplate.indexExists(CreateIndexFalseEntity.class)); + } +} \ No newline at end of file diff --git a/src/test/resources/existing-index-repository-test.xml b/src/test/resources/existing-index-repository-test.xml new file mode 100644 index 000000000..658d633a5 --- /dev/null +++ b/src/test/resources/existing-index-repository-test.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + \ No newline at end of file