DATAES-88 - add method createIndex(Class<T> clazz, Object settings)

This commit is contained in:
Mohsin Husen 2014-05-01 11:46:20 +01:00
parent 3261af3f5a
commit 230c041d83
3 changed files with 63 additions and 18 deletions

View File

@ -61,6 +61,14 @@ public interface ElasticsearchOperations {
*/ */
boolean createIndex(String indexName, Object settings); boolean createIndex(String indexName, Object settings);
/**
* Create an index for given class and Settings
*
* @param clazz
* @param settings
*/
<T> boolean createIndex(Class<T> clazz, Object settings);
/** /**
* Create mapping for a class * Create mapping for a class
* *

View File

@ -643,6 +643,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
return createIndexRequestBuilder.execute().actionGet().isAcknowledged(); return createIndexRequestBuilder.execute().actionGet().isAcknowledged();
} }
@Override
public <T> boolean createIndex(Class<T> clazz, Object settings) {
return createIndex(getPersistentEntityFor(clazz).getIndexName(), settings);
}
private <T> Map getDefaultSettings(ElasticsearchPersistentEntity<T> persistentEntity) { private <T> Map getDefaultSettings(ElasticsearchPersistentEntity<T> persistentEntity) {
return new MapBuilder<String, String>().put("index.number_of_shards", String.valueOf(persistentEntity.getShards())) return new MapBuilder<String, String>().put("index.number_of_shards", String.valueOf(persistentEntity.getShards()))
.put("index.number_of_replicas", String.valueOf(persistentEntity.getReplicas())) .put("index.number_of_replicas", String.valueOf(persistentEntity.getReplicas()))

View File

@ -1377,29 +1377,28 @@ public class ElasticsearchTemplateTests {
@Test @Test
public void shouldCreateIndexWithGivenSettings() { public void shouldCreateIndexWithGivenSettings() {
// given // given
String settings = String settings = "{\n" +
"{ " + " \"index\": {\n" +
"\"settings\" : { " + " \"number_of_shards\": \"1\",\n" +
"\"index\": { " + " \"number_of_replicas\": \"0\",\n" +
"\"analysis\" :{ " + " \"analysis\": {\n" +
"\"analyzer\": { " + " \"analyzer\": {\n" +
"\"email-analyzer\": { " + " \"emailAnalyzer\": {\n" +
"\"type\" : \"custom\"," + " \"type\": \"custom\",\n" +
"\"tokenizer\" : \"uax_url_email\"," + " \"tokenizer\": \"uax_url_email\"\n" +
"\"filter\" : [\"standard\", \"lowercase\", \"stop\"]\n" +
"}\n" +
" }\n" + " }\n" +
" }\n" + " }\n" +
" }\n" + " }\n" +
" }\n" + " }\n" +
"}"; "}";
elasticsearchTemplate.deleteIndex("test-index"); elasticsearchTemplate.deleteIndex("test-index");
// when // when
elasticsearchTemplate.createIndex("test-index", settings); elasticsearchTemplate.createIndex("test-index", settings);
// then // then
Map map = elasticsearchTemplate.getSetting("test-index"); Map map = elasticsearchTemplate.getSetting("test-index");
boolean hasAnalyzer = map.containsKey("index.settings.index.analysis.analyzer.email-analyzer.tokenizer"); boolean hasAnalyzer = map.containsKey("index.analysis.analyzer.emailAnalyzer.tokenizer");
String emailAnalyzer = (String) map.get("index.settings.index.analysis.analyzer.email-analyzer.tokenizer"); String emailAnalyzer = (String) map.get("index.analysis.analyzer.emailAnalyzer.tokenizer");
assertThat(elasticsearchTemplate.indexExists("test-index"), is(true)); assertThat(elasticsearchTemplate.indexExists("test-index"), is(true));
assertThat(hasAnalyzer, is(true)); assertThat(hasAnalyzer, is(true));
assertThat(emailAnalyzer, is("uax_url_email")); assertThat(emailAnalyzer, is("uax_url_email"));
@ -1426,6 +1425,39 @@ public class ElasticsearchTemplateTests {
assertThat((String) map.get("index.store.type"), is("memory")); 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 @Test
public void shouldTestResultsAcrossMultipleIndices() { public void shouldTestResultsAcrossMultipleIndices() {