From 956944265ab875213225b7d6f0d9745577b63536 Mon Sep 17 00:00:00 2001 From: Kevin Leturc Date: Fri, 20 Feb 2015 16:00:47 +0100 Subject: [PATCH] DATAES-151 Update findAll(Iterable) method to do a multiGet query instead of search query. --- .../AbstractElasticsearchRepository.java | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) 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 d32d1a14f..502a13b0a 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.*; +import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; import java.io.Serializable; import java.lang.reflect.ParameterizedType; @@ -26,15 +26,23 @@ import java.util.Collections; import java.util.List; import org.elasticsearch.ElasticsearchException; -import org.elasticsearch.common.collect.Lists; import org.elasticsearch.index.query.QueryBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.InvalidDataAccessApiUsageException; -import org.springframework.data.domain.*; +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.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.FacetedPage; -import org.springframework.data.elasticsearch.core.query.*; +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.repository.ElasticsearchRepository; import org.springframework.util.Assert; @@ -45,6 +53,7 @@ import org.springframework.util.Assert; * @author Rizwan Idrees * @author Mohsin Husen * @author Ryan Henszey + * @author Kevin Leturc */ public abstract class AbstractElasticsearchRepository implements ElasticsearchRepository { @@ -121,9 +130,9 @@ public abstract class AbstractElasticsearchRepository findAll(Iterable ids) { Assert.notNull(ids, "ids can't be null."); SearchQuery query = new NativeSearchQueryBuilder() - .withQuery(inQuery(entityInformation.getIdAttribute(), Lists.newArrayList(ids))) + .withIds(stringIdsRepresentation(ids)) .build(); - return elasticsearchOperations.queryForPage(query, getEntityClass()); + return elasticsearchOperations.multiGet(query, getEntityClass()); } @Override @@ -302,6 +311,15 @@ 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; + } + protected abstract String stringIdRepresentation(ID id); private Long extractVersionFromBean(T entity) {