From 230c041d834b4a5cbddc5d6af887b48ee1b4a2bd Mon Sep 17 00:00:00 2001 From: Mohsin Husen Date: Thu, 1 May 2014 11:46:20 +0100 Subject: [PATCH] DATAES-88 - add method createIndex(Class clazz, Object settings) --- .../core/ElasticsearchOperations.java | 8 +++ .../core/ElasticsearchTemplate.java | 5 ++ .../core/ElasticsearchTemplateTests.java | 68 ++++++++++++++----- 3 files changed, 63 insertions(+), 18 deletions(-) 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 e2dce69f0..1b202c898 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchOperations.java @@ -61,6 +61,14 @@ public interface ElasticsearchOperations { */ boolean createIndex(String indexName, Object settings); + /** + * Create an index for given class and Settings + * + * @param clazz + * @param settings + */ + boolean createIndex(Class clazz, Object settings); + /** * Create mapping for a class * 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 60372ef00..b61efe4df 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -643,6 +643,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { return createIndexRequestBuilder.execute().actionGet().isAcknowledged(); } + @Override + public boolean createIndex(Class clazz, Object settings) { + return createIndex(getPersistentEntityFor(clazz).getIndexName(), settings); + } + private Map getDefaultSettings(ElasticsearchPersistentEntity persistentEntity) { return new MapBuilder().put("index.number_of_shards", String.valueOf(persistentEntity.getShards())) .put("index.number_of_replicas", String.valueOf(persistentEntity.getReplicas())) 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 e59b4d415..d080b148f 100755 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java @@ -1377,29 +1377,28 @@ public class ElasticsearchTemplateTests { @Test public void shouldCreateIndexWithGivenSettings() { // given - String settings = - "{ " + - "\"settings\" : { " + - "\"index\": { " + - "\"analysis\" :{ " + - "\"analyzer\": { " + - "\"email-analyzer\": { " + - "\"type\" : \"custom\"," + - "\"tokenizer\" : \"uax_url_email\"," + - "\"filter\" : [\"standard\", \"lowercase\", \"stop\"]\n" + - "}\n" + - "}\n" + - "}\n" + - "}\n" + - "}\n" + - "}"; + String settings = "{\n" + + " \"index\": {\n" + + " \"number_of_shards\": \"1\",\n" + + " \"number_of_replicas\": \"0\",\n" + + " \"analysis\": {\n" + + " \"analyzer\": {\n" + + " \"emailAnalyzer\": {\n" + + " \"type\": \"custom\",\n" + + " \"tokenizer\": \"uax_url_email\"\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "}"; + elasticsearchTemplate.deleteIndex("test-index"); // when elasticsearchTemplate.createIndex("test-index", settings); // then Map map = elasticsearchTemplate.getSetting("test-index"); - boolean hasAnalyzer = map.containsKey("index.settings.index.analysis.analyzer.email-analyzer.tokenizer"); - String emailAnalyzer = (String) map.get("index.settings.index.analysis.analyzer.email-analyzer.tokenizer"); + boolean hasAnalyzer = map.containsKey("index.analysis.analyzer.emailAnalyzer.tokenizer"); + String emailAnalyzer = (String) map.get("index.analysis.analyzer.emailAnalyzer.tokenizer"); assertThat(elasticsearchTemplate.indexExists("test-index"), is(true)); assertThat(hasAnalyzer, is(true)); assertThat(emailAnalyzer, is("uax_url_email")); @@ -1426,6 +1425,39 @@ public class ElasticsearchTemplateTests { assertThat((String) map.get("index.store.type"), is("memory")); } + /* + DATAES-88 + */ + @Test + public void shouldCreateIndexWithGivenClassAndSettings() { + //given + String settings = "{\n" + + " \"index\": {\n" + + " \"number_of_shards\": \"1\",\n" + + " \"number_of_replicas\": \"0\",\n" + + " \"analysis\": {\n" + + " \"analyzer\": {\n" + + " \"emailAnalyzer\": {\n" + + " \"type\": \"custom\",\n" + + " \"tokenizer\": \"uax_url_email\"\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "}"; + + elasticsearchTemplate.deleteIndex(SampleEntity.class); + elasticsearchTemplate.createIndex(SampleEntity.class, settings); + elasticsearchTemplate.refresh(SampleEntity.class, true); + + // then + Map map = elasticsearchTemplate.getSetting(SampleEntity.class); + assertThat(elasticsearchTemplate.indexExists("test-index"), is(true)); + assertThat(map.containsKey("index.number_of_replicas"), is(true)); + assertThat(map.containsKey("index.number_of_shards"), is(true)); + assertThat((String) map.get("index.number_of_replicas"), is("0")); + assertThat((String) map.get("index.number_of_shards"), is("1")); + } @Test public void shouldTestResultsAcrossMultipleIndices() {