reverted changes for auto-generated Id , added test cases for scan and scroll

This commit is contained in:
Mohsin Husen 2013-03-19 18:05:20 +00:00
parent 41de820c70
commit e433ec2d9e
3 changed files with 75 additions and 13 deletions

View File

@ -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());

View File

@ -58,13 +58,10 @@ public class MappingElasticsearchEntityInformation<T, ID extends Serializable> e
public ID getId(T entity) {
ElasticsearchPersistentProperty id = entityMetadata.getIdProperty();
try {
if(id != null){
return (ID) BeanWrapper.create(entity, null).getProperty(id);
}
} catch (Exception e) {
throw new IllegalStateException("ID could not be resolved", e);
}
return null;
}
@SuppressWarnings("unchecked")

View File

@ -540,4 +540,76 @@ public class ElasticsearchTemplateTest {
assertThat(sampleEntities.getTotalElements(), is(equalTo(1L)));
assertThat(sampleEntities.getContent(), hasItem(sampleEntity1));
}
@Test
public void shouldReturnResultsWithScanAndScroll(){
//given
List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();
//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<SampleEntity> sampleEntities = new ArrayList<SampleEntity>();
boolean hasRecords = true;
while (hasRecords){
Page<SampleEntity> page = elasticsearchTemplate.scroll(scrollId, 5000L , new ResultsMapper<SampleEntity>() {
@Override
public Page<SampleEntity> mapResults(SearchResponse response) {
List<SampleEntity> chunk = new ArrayList<SampleEntity>();
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<SampleEntity>(chunk);
}
});
if(page != null) {
sampleEntities.addAll(page.getContent());
hasRecords = page.hasNextPage();
}
else{
hasRecords = false;
}
}
assertThat(sampleEntities.size(), is(equalTo(2)));
}
}