mirror of
				https://github.com/spring-projects/spring-data-elasticsearch.git
				synced 2025-10-30 22:28:47 +00:00 
			
		
		
		
	Added method support for Repository and Template to return List<T> (https://github.com/BioMedCentralLtd/spring-data-elasticsearch/issues/22)
This commit is contained in:
		
							parent
							
								
									6e57235fa9
								
							
						
					
					
						commit
						c471774e0a
					
				| @ -119,6 +119,26 @@ public interface ElasticsearchOperations { | |||||||
|      */ |      */ | ||||||
|     <T> Page<T> queryForPage(StringQuery query, Class<T> clazz); |     <T> Page<T> queryForPage(StringQuery query, Class<T> clazz); | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Execute the criteria query against elasticsearch and return result as {@link List} | ||||||
|  |      * | ||||||
|  |      * @param query | ||||||
|  |      * @param clazz | ||||||
|  |      * @param <T> | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     <T> List<T> queryForList(CriteriaQuery query, Class<T> clazz); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Execute the string query against elasticsearch and return result as {@link List} | ||||||
|  |      * | ||||||
|  |      * @param query | ||||||
|  |      * @param clazz | ||||||
|  |      * @param <T> | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     <T> List<T> queryForList(StringQuery query, Class<T> clazz); | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Execute the query against elasticsearch and return ids |      * Execute the query against elasticsearch and return ids | ||||||
|      * |      * | ||||||
|  | |||||||
| @ -152,6 +152,17 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { | |||||||
|         return resultsMapper.mapResults(response); |         return resultsMapper.mapResults(response); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|  |     public <T> List<T> queryForList(CriteriaQuery query, Class<T> clazz){ | ||||||
|  |         return queryForPage(query, clazz).getContent(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public <T> List<T> queryForList(StringQuery query, Class<T> clazz){ | ||||||
|  |         return queryForPage(query, clazz).getContent(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public <T> List<String> queryForIds(SearchQuery query) { |     public <T> List<String> queryForIds(SearchQuery query) { | ||||||
|         SearchRequestBuilder request = prepareSearch(query).setQuery(query.getElasticsearchQuery()) |         SearchRequestBuilder request = prepareSearch(query).setQuery(query.getElasticsearchQuery()) | ||||||
|  | |||||||
| @ -49,6 +49,11 @@ public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery | |||||||
|         if(queryMethod.isPageQuery()){ |         if(queryMethod.isPageQuery()){ | ||||||
|             query.setPageable(accessor.getPageable()); |             query.setPageable(accessor.getPageable()); | ||||||
|             return elasticsearchOperations.queryForPage(query, queryMethod.getEntityInformation().getJavaType()); |             return elasticsearchOperations.queryForPage(query, queryMethod.getEntityInformation().getJavaType()); | ||||||
|  |         } else if (queryMethod.isCollectionQuery()) { | ||||||
|  |             if(accessor.getPageable() != null){ | ||||||
|  |                 query.setPageable(accessor.getPageable()); | ||||||
|  |             } | ||||||
|  |             return elasticsearchOperations.queryForList(query,queryMethod.getEntityInformation().getJavaType()); | ||||||
|         } |         } | ||||||
|         return elasticsearchOperations.queryForObject(query, queryMethod.getEntityInformation().getJavaType()); |         return elasticsearchOperations.queryForObject(query, queryMethod.getEntityInformation().getJavaType()); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -65,7 +65,13 @@ public class ElasticsearchStringQuery extends AbstractElasticsearchRepositoryQue | |||||||
|         if(queryMethod.isPageQuery()){ |         if(queryMethod.isPageQuery()){ | ||||||
|             stringQuery.setPageable(accessor.getPageable()); |             stringQuery.setPageable(accessor.getPageable()); | ||||||
|             return  elasticsearchOperations.queryForPage(stringQuery, queryMethod.getEntityInformation().getJavaType()); |             return  elasticsearchOperations.queryForPage(stringQuery, queryMethod.getEntityInformation().getJavaType()); | ||||||
|  |         } else if(queryMethod.isCollectionQuery()) { | ||||||
|  |             if(accessor.getPageable() != null) { | ||||||
|  |                 stringQuery.setPageable(accessor.getPageable()); | ||||||
|             } |             } | ||||||
|  |             return elasticsearchOperations.queryForList(stringQuery,queryMethod.getEntityInformation().getJavaType()); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         return elasticsearchOperations.queryForObject(stringQuery, queryMethod.getEntityInformation().getJavaType()); |         return elasticsearchOperations.queryForObject(stringQuery, queryMethod.getEntityInformation().getJavaType()); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -614,6 +614,111 @@ public class ElasticsearchTemplateTest { | |||||||
|         assertThat(sampleEntities.size(), is(equalTo(2))); |         assertThat(sampleEntities.size(), is(equalTo(2))); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Test | ||||||
|  |     public void shouldReturnListForGivenCriteria(){ | ||||||
|  |         //given | ||||||
|  |         List<IndexQuery> indexQueries = new ArrayList<IndexQuery>(); | ||||||
|  |         //first document | ||||||
|  |         String documentId = randomNumeric(5); | ||||||
|  |         SampleEntity sampleEntity1 = new SampleEntity(); | ||||||
|  |         sampleEntity1.setId(documentId); | ||||||
|  |         sampleEntity1.setMessage("test message"); | ||||||
|  |         sampleEntity1.setVersion(System.currentTimeMillis()); | ||||||
|  | 
 | ||||||
|  |         IndexQuery indexQuery1 = new IndexQuery(); | ||||||
|  |         indexQuery1.setId(documentId); | ||||||
|  |         indexQuery1.setObject(sampleEntity1); | ||||||
|  |         indexQueries.add(indexQuery1); | ||||||
|  | 
 | ||||||
|  |         //second document | ||||||
|  |         String documentId2 = randomNumeric(5); | ||||||
|  |         SampleEntity sampleEntity2 = new SampleEntity(); | ||||||
|  |         sampleEntity2.setId(documentId2); | ||||||
|  |         sampleEntity2.setMessage("test test"); | ||||||
|  |         sampleEntity2.setVersion(System.currentTimeMillis()); | ||||||
|  | 
 | ||||||
|  |         IndexQuery indexQuery2 = new IndexQuery(); | ||||||
|  |         indexQuery2.setId(documentId2); | ||||||
|  |         indexQuery2.setObject(sampleEntity2); | ||||||
|  | 
 | ||||||
|  |         indexQueries.add(indexQuery2); | ||||||
|  | 
 | ||||||
|  |         //second document | ||||||
|  |         String documentId3 = randomNumeric(5); | ||||||
|  |         SampleEntity sampleEntity3 = new SampleEntity(); | ||||||
|  |         sampleEntity3.setId(documentId3); | ||||||
|  |         sampleEntity3.setMessage("some message"); | ||||||
|  |         sampleEntity3.setVersion(System.currentTimeMillis()); | ||||||
|  | 
 | ||||||
|  |         IndexQuery indexQuery3 = new IndexQuery(); | ||||||
|  |         indexQuery3.setId(documentId3); | ||||||
|  |         indexQuery3.setObject(sampleEntity3); | ||||||
|  | 
 | ||||||
|  |         indexQueries.add(indexQuery3); | ||||||
|  |         //when | ||||||
|  |         elasticsearchTemplate.bulkIndex(indexQueries); | ||||||
|  |         elasticsearchTemplate.refresh(SampleEntity.class,true); | ||||||
|  |         //when | ||||||
|  |         CriteriaQuery singleCriteriaQuery = new CriteriaQuery(new Criteria("message").contains("test")); | ||||||
|  |         CriteriaQuery multipleCriteriaQuery = new CriteriaQuery(new Criteria("message").contains("some").and("message").contains("message")); | ||||||
|  |         List<SampleEntity> sampleEntitiesForSingleCriteria = elasticsearchTemplate.queryForList(singleCriteriaQuery,SampleEntity.class); | ||||||
|  |         List<SampleEntity> sampleEntitiesForAndCriteria = elasticsearchTemplate.queryForList(multipleCriteriaQuery,SampleEntity.class); | ||||||
|  |         //then | ||||||
|  |         assertThat(sampleEntitiesForSingleCriteria.size(),is(2)); | ||||||
|  |         assertThat(sampleEntitiesForAndCriteria.size(),is(1)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void shouldReturnListForGivenStringQuery(){ | ||||||
|  |         //given | ||||||
|  |         List<IndexQuery> indexQueries = new ArrayList<IndexQuery>(); | ||||||
|  |         //first document | ||||||
|  |         String documentId = randomNumeric(5); | ||||||
|  |         SampleEntity sampleEntity1 = new SampleEntity(); | ||||||
|  |         sampleEntity1.setId(documentId); | ||||||
|  |         sampleEntity1.setMessage("test message"); | ||||||
|  |         sampleEntity1.setVersion(System.currentTimeMillis()); | ||||||
|  | 
 | ||||||
|  |         IndexQuery indexQuery1 = new IndexQuery(); | ||||||
|  |         indexQuery1.setId(documentId); | ||||||
|  |         indexQuery1.setObject(sampleEntity1); | ||||||
|  |         indexQueries.add(indexQuery1); | ||||||
|  | 
 | ||||||
|  |         //second document | ||||||
|  |         String documentId2 = randomNumeric(5); | ||||||
|  |         SampleEntity sampleEntity2 = new SampleEntity(); | ||||||
|  |         sampleEntity2.setId(documentId2); | ||||||
|  |         sampleEntity2.setMessage("test test"); | ||||||
|  |         sampleEntity2.setVersion(System.currentTimeMillis()); | ||||||
|  | 
 | ||||||
|  |         IndexQuery indexQuery2 = new IndexQuery(); | ||||||
|  |         indexQuery2.setId(documentId2); | ||||||
|  |         indexQuery2.setObject(sampleEntity2); | ||||||
|  | 
 | ||||||
|  |         indexQueries.add(indexQuery2); | ||||||
|  | 
 | ||||||
|  |         //second document | ||||||
|  |         String documentId3 = randomNumeric(5); | ||||||
|  |         SampleEntity sampleEntity3 = new SampleEntity(); | ||||||
|  |         sampleEntity3.setId(documentId3); | ||||||
|  |         sampleEntity3.setMessage("some message"); | ||||||
|  |         sampleEntity3.setVersion(System.currentTimeMillis()); | ||||||
|  | 
 | ||||||
|  |         IndexQuery indexQuery3 = new IndexQuery(); | ||||||
|  |         indexQuery3.setId(documentId3); | ||||||
|  |         indexQuery3.setObject(sampleEntity3); | ||||||
|  | 
 | ||||||
|  |         indexQueries.add(indexQuery3); | ||||||
|  |         //when | ||||||
|  |         elasticsearchTemplate.bulkIndex(indexQueries); | ||||||
|  |         elasticsearchTemplate.refresh(SampleEntity.class,true); | ||||||
|  |         //when | ||||||
|  |         StringQuery stringQuery = new StringQuery(matchAllQuery().toString()); | ||||||
|  |         List<SampleEntity> sampleEntities = elasticsearchTemplate.queryForList(stringQuery,SampleEntity.class); | ||||||
|  |         //then | ||||||
|  |         assertThat(sampleEntities.size(),is(3)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Test |     @Test | ||||||
|     public void shouldPutMappingForGivenEntity()throws Exception{ |     public void shouldPutMappingForGivenEntity()throws Exception{ | ||||||
|         //given |         //given | ||||||
|  | |||||||
| @ -463,4 +463,39 @@ public class CustomMethodRepositoryTest { | |||||||
|         assertThat(pageResult.getContent().get(0).getMessage(),is(sampleEntity3.getMessage())); |         assertThat(pageResult.getContent().get(0).getMessage(),is(sampleEntity3.getMessage())); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void shouldReturnListForMessage(){ | ||||||
|  |         //given | ||||||
|  |         String documentId = random(5); | ||||||
|  |         SampleEntity sampleEntity = new SampleEntity(); | ||||||
|  |         sampleEntity.setId(documentId); | ||||||
|  |         sampleEntity.setMessage("abc"); | ||||||
|  |         sampleEntity.setVersion(System.currentTimeMillis()); | ||||||
|  |         repository.save(sampleEntity); | ||||||
|  | 
 | ||||||
|  |         String documentId2 = randomNumeric(5); | ||||||
|  |         SampleEntity sampleEntity2 = new SampleEntity(); | ||||||
|  |         sampleEntity2.setId(documentId2); | ||||||
|  |         sampleEntity2.setMessage("abd"); | ||||||
|  |         sampleEntity.setVersion(System.currentTimeMillis()); | ||||||
|  |         repository.save(sampleEntity2); | ||||||
|  | 
 | ||||||
|  |         String documentId3 = randomNumeric(5); | ||||||
|  |         SampleEntity sampleEntity3 = new SampleEntity(); | ||||||
|  |         sampleEntity3.setId(documentId3); | ||||||
|  |         sampleEntity3.setMessage("abe"); | ||||||
|  |         sampleEntity.setVersion(System.currentTimeMillis()); | ||||||
|  |         repository.save(sampleEntity3); | ||||||
|  |         //when | ||||||
|  |         List<SampleEntity> sampleEntities = repository.findByMessage("abc"); | ||||||
|  |         //then | ||||||
|  |         assertThat(sampleEntities.isEmpty(),is(false)); | ||||||
|  |         assertThat(sampleEntities.size(),is(1)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -36,6 +36,9 @@ public interface SampleCustomMethodRepository extends ElasticsearchRepository<Sa | |||||||
|     @Query("{\"bool\" : {\"must\" : {\"field\" : {\"message\" : \"?0\"}}}}") |     @Query("{\"bool\" : {\"must\" : {\"field\" : {\"message\" : \"?0\"}}}}") | ||||||
|     Page<SampleEntity> findByMessage(String message, Pageable pageable); |     Page<SampleEntity> findByMessage(String message, Pageable pageable); | ||||||
| 
 | 
 | ||||||
|  |     @Query("{\"bool\" : {\"must\" : {\"field\" : {\"message\" : \"?0\"}}}}") | ||||||
|  |     List<SampleEntity> findByMessage(String message); | ||||||
|  | 
 | ||||||
|     Page<SampleEntity> findByAvailable(boolean available, Pageable pageable); |     Page<SampleEntity> findByAvailable(boolean available, Pageable pageable); | ||||||
| 
 | 
 | ||||||
|     Page<SampleEntity> findByRateLessThan(int rate, Pageable pageable); |     Page<SampleEntity> findByRateLessThan(int rate, Pageable pageable); | ||||||
|  | |||||||
| @ -18,6 +18,8 @@ package org.springframework.data.elasticsearch.repositories; | |||||||
| import org.springframework.data.elasticsearch.Book; | import org.springframework.data.elasticsearch.Book; | ||||||
| import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; | import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; | ||||||
| 
 | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * @author Rizwan Idrees |  * @author Rizwan Idrees | ||||||
|  * @author Mohsin Husen |  * @author Mohsin Husen | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user