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 29e8ba608..9ec2a14b3 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -388,15 +388,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { String type = isBlank(query.getType())? retrieveTypeFromPersistentEntity(query.getObject().getClass())[0] : query.getType(); - IndexRequestBuilder indexRequestBuilder = null; - - if(query.getId() != null){ - indexRequestBuilder = client.prepareIndex(indexName,type,query.getId()); - }else { - indexRequestBuilder = client.prepareIndex(indexName,type); - } - - indexRequestBuilder.setSource(objectMapper.writeValueAsString(query.getObject())); + IndexRequestBuilder indexRequestBuilder = client.prepareIndex(indexName,type,query.getId()) + .setSource(objectMapper.writeValueAsString(query.getObject())); if(query.getVersion() != null){ indexRequestBuilder.setVersion(query.getVersion()); diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/MappingElasticsearchEntityInformation.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/MappingElasticsearchEntityInformation.java index 2eb988079..66cb43b31 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/support/MappingElasticsearchEntityInformation.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/MappingElasticsearchEntityInformation.java @@ -58,13 +58,10 @@ public class MappingElasticsearchEntityInformation e public ID getId(T entity) { ElasticsearchPersistentProperty id = entityMetadata.getIdProperty(); try { - if(id != null){ - return (ID) BeanWrapper.create(entity, null).getProperty(id); - } + return (ID) BeanWrapper.create(entity, null).getProperty(id); } catch (Exception e) { throw new IllegalStateException("ID could not be resolved", e); } - return null; } @SuppressWarnings("unchecked") diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTest.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTest.java index e81ce7fd9..34f805d40 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTest.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTest.java @@ -540,4 +540,76 @@ public class ElasticsearchTemplateTest { assertThat(sampleEntities.getTotalElements(), is(equalTo(1L))); assertThat(sampleEntities.getContent(), hasItem(sampleEntity1)); } + + @Test + public void shouldReturnResultsWithScanAndScroll(){ + //given + List indexQueries = new ArrayList(); + //first document + String documentId = randomNumeric(5); + SampleEntity sampleEntity1 = new SampleEntity(); + sampleEntity1.setId(documentId); + sampleEntity1.setMessage("some 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("some message"); + sampleEntity2.setVersion(System.currentTimeMillis()); + + IndexQuery indexQuery2 = new IndexQuery(); + indexQuery2.setId(documentId2); + indexQuery2.setObject(sampleEntity2); + + indexQueries.add(indexQuery2); + //when + elasticsearchTemplate.bulkIndex(indexQueries); + elasticsearchTemplate.refresh(SampleEntity.class,true); + //then + + SearchQuery searchQuery = new SearchQuery(); + searchQuery.addIndices("test-index"); + searchQuery.addTypes("test-type"); + searchQuery.setElasticsearchQuery(matchAllQuery()); + searchQuery.setPageable(new PageRequest(0,1)); + + String scrollId = elasticsearchTemplate.scan(searchQuery,1000,false); + List sampleEntities = new ArrayList(); + boolean hasRecords = true; + while (hasRecords){ + Page page = elasticsearchTemplate.scroll(scrollId, 5000L , new ResultsMapper() { + @Override + public Page mapResults(SearchResponse response) { + List chunk = new ArrayList(); + for(SearchHit searchHit : response.getHits()){ + if(response.getHits().getHits().length <= 0) { + return null; + } + SampleEntity user = new SampleEntity(); + user.setId(searchHit.getId()); + user.setMessage((String)searchHit.getSource().get("message")); + chunk.add(user); + } + return new PageImpl(chunk); + } + + }); + if(page != null) { + sampleEntities.addAll(page.getContent()); + hasRecords = page.hasNextPage(); + } + else{ + hasRecords = false; + } + + } + assertThat(sampleEntities.size(), is(equalTo(2))); + } }