From 7f11f237181283f837cbca40addd6d7bec658b83 Mon Sep 17 00:00:00 2001 From: Mohsin Husen Date: Sun, 12 May 2013 13:54:48 +0100 Subject: [PATCH] DATAES-7 : Migrate to the latest version of Elasticsearch 0.90.0 --- pom.xml | 2 +- .../core/ElasticsearchTemplate.java | 16 +++++++------- .../repository/ElasticsearchRepository.java | 4 +--- .../AbstractElasticsearchRepository.java | 22 ++++++++++--------- .../SimpleElasticsearchRepositoryTests.java | 8 +++++-- 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/pom.xml b/pom.xml index 898e85c8a..8078f6f96 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ 3.2.1 2.6 - 0.20.5 + 0.90.0 1.9.2 1.6.0.BUILD-SNAPSHOT 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 c31f313ba..fd33fbed5 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -107,7 +107,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { try { XContentBuilder xContentBuilder = buildMapping(clazz, persistentEntity.getIndexType(), persistentEntity.getIdProperty().getFieldName()); - return requestBuilder.setSource(xContentBuilder).execute().actionGet().acknowledged(); + return requestBuilder.setSource(xContentBuilder).execute().actionGet().isAcknowledged(); } catch (Exception e) { throw new ElasticsearchException("Failed to build mapping for " + clazz.getSimpleName() , e); } @@ -199,7 +199,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { if(query.getQuery() != null){ countRequestBuilder.setQuery(query.getQuery()); } - return countRequestBuilder.execute().actionGet().count(); + return countRequestBuilder.execute().actionGet().getCount(); } @Override @@ -218,9 +218,9 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { BulkResponse bulkResponse = bulkRequest.execute().actionGet(); if (bulkResponse.hasFailures()) { Map failedDocuments = new HashMap(); - for (BulkItemResponse item : bulkResponse.items()) { - if (item.failed()) - failedDocuments.put(item.getId(), item.failureMessage()); + for (BulkItemResponse item : bulkResponse.getItems()) { + if (item.isFailed()) + failedDocuments.put(item.getId(), item.getFailureMessage()); } throw new ElasticsearchException("Bulk indexing has failures. Use ElasticsearchException.getFailedDocuments() for detailed messages [" + failedDocuments+"]", failedDocuments); } @@ -235,7 +235,7 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { public boolean deleteIndex(Class clazz){ String indexName = getPersistentEntityFor(clazz).getIndexName(); if(indexExists(indexName)){ - return client.admin().indices().delete(new DeleteIndexRequest(indexName)).actionGet().acknowledged(); + return client.admin().indices().delete(new DeleteIndexRequest(indexName)).actionGet().isAcknowledged(); } return false; } @@ -376,13 +376,13 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { private boolean indexExists(String indexName) { return client.admin() .indices() - .exists(indicesExistsRequest(indexName)).actionGet().exists(); + .exists(indicesExistsRequest(indexName)).actionGet().isExists(); } private boolean createIndexWithSettings(Class clazz) { ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz); return client.admin().indices().create(Requests.createIndexRequest(persistentEntity.getIndexName()). - settings(getSettings(persistentEntity))).actionGet().acknowledged(); + settings(getSettings(persistentEntity))).actionGet().isAcknowledged(); } private Map getSettings(ElasticsearchPersistentEntity persistentEntity) { diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.java b/src/main/java/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.java index 0415b4b59..febdd97fd 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.java @@ -41,7 +41,5 @@ public interface ElasticsearchRepository extends Ela Page search(SearchQuery searchQuery); - Page searchSimilar(T entity); - - Page searchSimilar(T entity, Pageable pageable); + Page searchSimilar(T entity, SearchQuery searchQuery); } 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 2eb877de1..f75240c47 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 @@ -200,17 +200,19 @@ public abstract class AbstractElasticsearchRepository } @Override - public Page searchSimilar(T entity) { - return searchSimilar(entity, DEFAULT_PAGE); - } - - @Override - public Page searchSimilar(T entity, Pageable pageable) { + public Page searchSimilar(T entity, SearchQuery searchQuery) { Assert.notNull(entity, "Cannot search similar records for 'null'."); - Assert.notNull(entity, "Pageable cannot be 'null'"); + Assert.notNull(searchQuery.getFields(), "Fields cannot be 'null'"); MoreLikeThisQuery query = new MoreLikeThisQuery(); query.setId(stringIdRepresentation(extractIdFromBean(entity))); - query.setPageable(pageable); + query.setPageable(searchQuery.getPageable() != null ? searchQuery.getPageable() : DEFAULT_PAGE); + query.addFields(searchQuery.getFields().toArray(new String[searchQuery.getFields().size()])); + if(!searchQuery.getIndices().isEmpty()) { + query.addSearchIndices(searchQuery.getIndices().toArray(new String[searchQuery.getIndices().size()])); + } + if(!searchQuery.getTypes().isEmpty()){ + query.addSearchTypes(searchQuery.getTypes().toArray(new String[searchQuery.getTypes().size()])); + } return elasticsearchOperations.moreLikeThis(query, getEntityClass()); } @@ -296,14 +298,14 @@ public abstract class AbstractElasticsearchRepository this.elasticsearchOperations = elasticsearchOperations; } - + protected ID extractIdFromBean(T entity) { if (entityInformation != null) { return entityInformation.getId(entity); } return null; } - + protected abstract String stringIdRepresentation(ID id); private Long extractVersionFromBean(T entity){ diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepositoryTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepositoryTests.java index 53d08608b..455bff24c 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepositoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepositoryTests.java @@ -387,7 +387,6 @@ public class SimpleElasticsearchRepositoryTests { assertThat(sampleEntities,is(notNullValue())); } - @Test public void shouldReturnSimilarEntities(){ //given @@ -403,7 +402,11 @@ public class SimpleElasticsearchRepositoryTests { repository.save(sampleEntities); //when - Page results = repository.searchSimilar(sampleEntities.get(0)); + SearchQuery searchQuery = new NativeSearchQueryBuilder() + .withPageable(new PageRequest(0, 5)) + .withFields("message") + .build(); + Page results = repository.searchSimilar(sampleEntities.get(0), searchQuery); //then assertThat(results.getTotalElements(), is(greaterThanOrEqualTo(1L))); @@ -416,6 +419,7 @@ public class SimpleElasticsearchRepositoryTests { SampleEntity sampleEntity = new SampleEntity(); sampleEntity.setId(documentId); sampleEntity.setMessage(message); + sampleEntity.setRate(2); sampleEntity.setVersion(System.currentTimeMillis()); sampleEntities.add(sampleEntity); }