refactored, created searchQuery interface based, NativeSearchQueryBuilder support

This commit is contained in:
Mohsin Husen 2013-04-21 12:38:09 +01:00
parent f2325a94bd
commit 807b194e80
13 changed files with 252 additions and 153 deletions

View File

@ -143,13 +143,13 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
@Override @Override
public <T> Page<T> queryForPage(SearchQuery query, Class<T> clazz) { public <T> Page<T> queryForPage(SearchQuery query, Class<T> clazz) {
SearchResponse response = doSearch(prepareSearch(query,clazz), query.getElasticsearchQuery(), query.getElasticsearchFilter(),query.getElasticsearchSort()); SearchResponse response = doSearch(prepareSearch(query,clazz), query.getQuery(), query.getFilter(), query.getElasticsearchSort());
return mapResults(response, clazz, query.getPageable()); return mapResults(response, clazz, query.getPageable());
} }
@Override @Override
public <T> Page<T> queryForPage(SearchQuery query, ResultsMapper<T> resultsMapper) { public <T> Page<T> queryForPage(SearchQuery query, ResultsMapper<T> resultsMapper) {
SearchResponse response = doSearch(prepareSearch(query), query.getElasticsearchQuery(), query.getElasticsearchFilter(),query.getElasticsearchSort()); SearchResponse response = doSearch(prepareSearch(query), query.getQuery(), query.getFilter(), query.getElasticsearchSort());
return resultsMapper.mapResults(response); return resultsMapper.mapResults(response);
} }
@ -166,22 +166,22 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
@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.getQuery())
.setNoFields(); .setNoFields();
if(query.getElasticsearchFilter() != null){ if(query.getFilter() != null){
request.setFilter(query.getElasticsearchFilter()); request.setFilter(query.getFilter());
} }
SearchResponse response = request.execute().actionGet(); SearchResponse response = request.execute().actionGet();
return extractIds(response); return extractIds(response);
} }
@Override @Override
public <T> Page<T> queryForPage(CriteriaQuery query, Class<T> clazz) { public <T> Page<T> queryForPage(CriteriaQuery criteriaQuery, Class<T> clazz) {
QueryBuilder elasticsearchQuery = new CriteriaQueryProcessor().createQueryFromCriteria(query.getCriteria()); QueryBuilder query = new CriteriaQueryProcessor().createQueryFromCriteria(criteriaQuery.getCriteria());
SearchResponse response = prepareSearch(query,clazz) SearchResponse response = prepareSearch(criteriaQuery,clazz)
.setQuery(elasticsearchQuery) .setQuery(query)
.execute().actionGet(); .execute().actionGet();
return mapResults(response, clazz, query.getPageable()); return mapResults(response, clazz, criteriaQuery.getPageable());
} }
@Override @Override
@ -197,8 +197,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
ElasticsearchPersistentEntity<T> persistentEntity = getPersistentEntityFor(clazz); ElasticsearchPersistentEntity<T> persistentEntity = getPersistentEntityFor(clazz);
CountRequestBuilder countRequestBuilder = client.prepareCount(persistentEntity.getIndexName()) CountRequestBuilder countRequestBuilder = client.prepareCount(persistentEntity.getIndexName())
.setTypes(persistentEntity.getIndexType()); .setTypes(persistentEntity.getIndexType());
if(query.getElasticsearchQuery() != null){ if(query.getQuery() != null){
countRequestBuilder.setQuery(query.getElasticsearchQuery()); countRequestBuilder.setQuery(query.getQuery());
} }
return countRequestBuilder.execute().actionGet().count(); return countRequestBuilder.execute().actionGet().count();
} }
@ -254,30 +254,30 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
} }
@Override @Override
public <T> void delete(DeleteQuery query, Class<T> clazz) { public <T> void delete(DeleteQuery deleteQuery, Class<T> clazz) {
ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz); ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz);
client.prepareDeleteByQuery(persistentEntity.getIndexName()) client.prepareDeleteByQuery(persistentEntity.getIndexName())
.setTypes(persistentEntity.getIndexType()) .setTypes(persistentEntity.getIndexType())
.setQuery(query.getElasticsearchQuery()) .setQuery(deleteQuery.getQuery())
.execute().actionGet(); .execute().actionGet();
} }
@Override @Override
public String scan(SearchQuery query, long scrollTimeInMillis, boolean noFields) { public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noFields) {
Assert.notNull(query.getIndices(), "No index defined for Query"); Assert.notNull(searchQuery.getIndices(), "No index defined for Query");
Assert.notNull(query.getTypes(), "No type define for Query"); Assert.notNull(searchQuery.getTypes(), "No type define for Query");
Assert.notNull(query.getPageable(), "Query.pageable is required for scan & scroll"); Assert.notNull(searchQuery.getPageable(), "Query.pageable is required for scan & scroll");
SearchRequestBuilder requestBuilder = client.prepareSearch(toArray(query.getIndices())) SearchRequestBuilder requestBuilder = client.prepareSearch(toArray(searchQuery.getIndices()))
.setSearchType(SCAN) .setSearchType(SCAN)
.setQuery(query.getElasticsearchQuery()) .setQuery(searchQuery.getQuery())
.setTypes(toArray(query.getTypes())) .setTypes(toArray(searchQuery.getTypes()))
.setScroll(TimeValue.timeValueMillis(scrollTimeInMillis)) .setScroll(TimeValue.timeValueMillis(scrollTimeInMillis))
.setFrom(0) .setFrom(0)
.setSize(query.getPageable().getPageSize()); .setSize(searchQuery.getPageable().getPageSize());
if(query.getElasticsearchFilter() != null){ if(searchQuery.getFilter() != null){
requestBuilder.setFilter(query.getElasticsearchFilter()); requestBuilder.setFilter(searchQuery.getFilter());
} }
if(noFields){ if(noFields){

View File

@ -15,7 +15,6 @@
*/ */
package org.springframework.data.elasticsearch.core.query; package org.springframework.data.elasticsearch.core.query;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.util.Assert; import org.springframework.util.Assert;

View File

@ -25,7 +25,7 @@ import org.springframework.util.Assert;
* @author Rizwan Idrees * @author Rizwan Idrees
* @author Mohsin Husen * @author Mohsin Husen
*/ */
public class CriteriaQuery extends AbstractQuery implements Query { public class CriteriaQuery extends AbstractQuery{
private Criteria criteria; private Criteria criteria;
private CriteriaQuery() { private CriteriaQuery() {

View File

@ -25,13 +25,13 @@ import org.elasticsearch.index.query.QueryBuilder;
*/ */
public class DeleteQuery{ public class DeleteQuery{
private QueryBuilder elasticsearchQuery; private QueryBuilder query;
public QueryBuilder getElasticsearchQuery() { public QueryBuilder getQuery() {
return elasticsearchQuery; return query;
} }
public void setElasticsearchQuery(QueryBuilder elasticsearchQuery) { public void setQuery(QueryBuilder query) {
this.elasticsearchQuery = elasticsearchQuery; this.query = query;
} }
} }

View File

@ -0,0 +1,53 @@
/*
* Copyright 2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.elasticsearch.core.query;
import org.elasticsearch.index.query.FilterBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.sort.SortBuilder;
/**
* NativeSearchQuery
*
* @author Rizwan Idrees
* @author Mohsin Husen
*/
public class NativeSearchQuery extends AbstractQuery implements SearchQuery {
private QueryBuilder query;
private FilterBuilder filter;
private SortBuilder sort;
public NativeSearchQuery(QueryBuilder query, FilterBuilder filter, SortBuilder sort) {
this.query = query;
this.filter = filter;
this.sort = sort;
}
public QueryBuilder getQuery() {
return query;
}
public FilterBuilder getFilter() {
return filter;
}
public SortBuilder getElasticsearchSort() {
return sort;
}
}

View File

@ -0,0 +1,91 @@
/*
* Copyright 2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.elasticsearch.core.query;
import org.elasticsearch.index.query.FilterBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.springframework.data.domain.Pageable;
/**
* NativeSearchQuery
*
* @author Rizwan Idrees
* @author Mohsin Husen
*/
public class NativeSearchQueryBuilder {
private QueryBuilder queryBuilder;
private FilterBuilder filterBuilder;
private SortBuilder sortBuilder;
private Pageable pageable;
private String[] indices;
private String[] types;
private String[] fields;
public NativeSearchQueryBuilder withQuery(QueryBuilder queryBuilder){
this.queryBuilder = queryBuilder;
return this;
}
public NativeSearchQueryBuilder withFilter(FilterBuilder filterBuilder){
this.filterBuilder = filterBuilder;
return this;
}
public NativeSearchQueryBuilder withSort(SortBuilder sortBuilder){
this.sortBuilder = sortBuilder;
return this;
}
public NativeSearchQueryBuilder withPageable(Pageable pageable){
this.pageable = pageable;
return this;
}
public NativeSearchQueryBuilder withIndices(String... indices){
this.indices = indices;
return this;
}
public NativeSearchQueryBuilder withTypes(String... types){
this.types = types;
return this;
}
public NativeSearchQueryBuilder withFields(String... fields){
this.fields = fields;
return this;
}
public NativeSearchQuery build(){
NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryBuilder,filterBuilder,sortBuilder);
if(pageable != null){
nativeSearchQuery.setPageable(pageable);
}
if(indices != null) {
nativeSearchQuery.addIndices(indices);
}
if(types != null) {
nativeSearchQuery.addTypes(types);
}
if(fields != null) {
nativeSearchQuery.addFields(fields);
}
return nativeSearchQuery;
}
}

View File

@ -1,58 +1,11 @@
/*
* Copyright 2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.elasticsearch.core.query; package org.springframework.data.elasticsearch.core.query;
import org.elasticsearch.index.query.FilterBuilder; import org.elasticsearch.index.query.FilterBuilder;
import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.sort.SortBuilder; import org.elasticsearch.search.sort.SortBuilder;
/** public interface SearchQuery extends Query {
* SearchQuery QueryBuilder getQuery();
* FilterBuilder getFilter();
* @author Rizwan Idrees SortBuilder getElasticsearchSort();
* @author Mohsin Husen
*/
public class SearchQuery extends AbstractQuery{
private QueryBuilder elasticsearchQuery;
private FilterBuilder elasticsearchFilter;
private SortBuilder elasticsearchSort;
public QueryBuilder getElasticsearchQuery() {
return elasticsearchQuery;
}
public void setElasticsearchQuery(QueryBuilder elasticsearchQuery) {
this.elasticsearchQuery = elasticsearchQuery;
}
public FilterBuilder getElasticsearchFilter() {
return elasticsearchFilter;
}
public void setElasticsearchFilter(FilterBuilder elasticsearchFilter) {
this.elasticsearchFilter = elasticsearchFilter;
}
public SortBuilder getElasticsearchSort() {
return elasticsearchSort;
}
public void setElasticsearchSort(SortBuilder elasticsearchSort) {
this.elasticsearchSort = elasticsearchSort;
}
} }

View File

@ -35,9 +35,9 @@ public interface ElasticsearchRepository<T, ID extends Serializable> extends Ela
<S extends T> S index(S entity); <S extends T> S index(S entity);
Iterable<T> search(QueryBuilder elasticsearchQuery); Iterable<T> search(QueryBuilder query);
Page<T> search(QueryBuilder elasticsearchQuery, Pageable pageable); Page<T> search(QueryBuilder query, Pageable pageable);
Page<T> search(SearchQuery searchQuery); Page<T> search(SearchQuery searchQuery);

View File

@ -92,9 +92,10 @@ public class SimpleElasticsearchRepository<T> implements ElasticsearchRepository
@Override @Override
public Page<T> findAll(Pageable pageable) { public Page<T> findAll(Pageable pageable) {
SearchQuery query = new SearchQuery(); SearchQuery query = new NativeSearchQueryBuilder()
query.setElasticsearchQuery(matchAllQuery()); .withQuery(matchAllQuery())
query.setPageable(pageable); .withPageable(pageable)
.build();
return elasticsearchOperations.queryForPage(query, getEntityClass()); return elasticsearchOperations.queryForPage(query, getEntityClass());
} }
@ -104,22 +105,25 @@ public class SimpleElasticsearchRepository<T> implements ElasticsearchRepository
if (itemCount == 0) { if (itemCount == 0) {
return new PageImpl<T>(Collections.<T> emptyList()); return new PageImpl<T>(Collections.<T> emptyList());
} }
SearchQuery query = new SearchQuery(); SearchQuery query = new NativeSearchQueryBuilder()
query.setElasticsearchQuery(matchAllQuery()); .withQuery(matchAllQuery())
query.setPageable(new PageRequest(0,itemCount, sort)); .withPageable(new PageRequest(0,itemCount, sort))
.build();
return elasticsearchOperations.queryForPage(query, getEntityClass()); return elasticsearchOperations.queryForPage(query, getEntityClass());
} }
@Override @Override
public Iterable<T> findAll(Iterable<String> ids) { public Iterable<T> findAll(Iterable<String> ids) {
SearchQuery query = new SearchQuery(); SearchQuery query = new NativeSearchQueryBuilder()
query.setElasticsearchQuery(inQuery(entityInformation.getIdAttribute(), ids)); .withQuery(inQuery(entityInformation.getIdAttribute(), ids))
.build();
return elasticsearchOperations.queryForPage(query, getEntityClass()); return elasticsearchOperations.queryForPage(query, getEntityClass());
} }
@Override @Override
public long count() { public long count() {
SearchQuery query = new SearchQuery(); SearchQuery query = new NativeSearchQueryBuilder()
.withQuery(matchAllQuery()).build();
return elasticsearchOperations.count(query,getEntityClass()); return elasticsearchOperations.count(query,getEntityClass());
} }
@ -169,23 +173,24 @@ public class SimpleElasticsearchRepository<T> implements ElasticsearchRepository
} }
@Override @Override
public Iterable<T> search(QueryBuilder elasticsearchQuery) { public Iterable<T> search(QueryBuilder query) {
SearchQuery query = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder()
int count = (int) elasticsearchOperations.count(query, getEntityClass()); .withQuery(query).build();
int count = (int) elasticsearchOperations.count(searchQuery, getEntityClass());
if(count == 0){ if(count == 0){
return new PageImpl<T>(Collections.<T>emptyList()); return new PageImpl<T>(Collections.<T>emptyList());
} }
query.setPageable(new PageRequest(0,count)); searchQuery.setPageable(new PageRequest(0, count));
query.setElasticsearchQuery(elasticsearchQuery); return elasticsearchOperations.queryForPage(searchQuery, getEntityClass());
return elasticsearchOperations.queryForPage(query, getEntityClass());
} }
@Override @Override
public Page<T> search(QueryBuilder elasticsearchQuery, Pageable pageable) { public Page<T> search(QueryBuilder query, Pageable pageable) {
SearchQuery query = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder()
query.setElasticsearchQuery(elasticsearchQuery); .withQuery(query)
query.setPageable(pageable); .withPageable(pageable)
return elasticsearchOperations.queryForPage(query, getEntityClass()); .build();
return elasticsearchOperations.queryForPage(searchQuery, getEntityClass());
} }
@Override @Override
@ -233,9 +238,9 @@ public class SimpleElasticsearchRepository<T> implements ElasticsearchRepository
@Override @Override
public void deleteAll() { public void deleteAll() {
DeleteQuery query = new DeleteQuery(); DeleteQuery deleteQuery = new DeleteQuery();
query.setElasticsearchQuery(matchAllQuery()); deleteQuery.setQuery(matchAllQuery());
elasticsearchOperations.delete(query, getEntityClass()); elasticsearchOperations.delete(deleteQuery, getEntityClass());
elasticsearchOperations.refresh(entityInformation.getIndexName(),true); elasticsearchOperations.refresh(entityInformation.getIndexName(),true);
} }

View File

@ -19,7 +19,6 @@ package org.springframework.data.elasticsearch.core;
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.sort.FieldSortBuilder; import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.search.sort.SortOrder;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore; import org.junit.Ignore;
@ -61,7 +60,7 @@ public class ElasticsearchTemplateTest {
public void before(){ public void before(){
elasticsearchTemplate.createIndex(SampleEntity.class); elasticsearchTemplate.createIndex(SampleEntity.class);
DeleteQuery deleteQuery = new DeleteQuery(); DeleteQuery deleteQuery = new DeleteQuery();
deleteQuery.setElasticsearchQuery(matchAllQuery()); deleteQuery.setQuery(matchAllQuery());
elasticsearchTemplate.delete(deleteQuery,SampleEntity.class); elasticsearchTemplate.delete(deleteQuery,SampleEntity.class);
elasticsearchTemplate.refresh(SampleEntity.class, true); elasticsearchTemplate.refresh(SampleEntity.class, true);
} }
@ -79,8 +78,7 @@ public class ElasticsearchTemplateTest {
indexQuery.setObject(sampleEntity); indexQuery.setObject(sampleEntity);
elasticsearchTemplate.index(indexQuery); elasticsearchTemplate.index(indexQuery);
elasticsearchTemplate.refresh(SampleEntity.class, true); elasticsearchTemplate.refresh(SampleEntity.class, true);
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
searchQuery.setElasticsearchQuery(matchAllQuery());
//when //when
long count = elasticsearchTemplate.count(searchQuery, SampleEntity.class); long count = elasticsearchTemplate.count(searchQuery, SampleEntity.class);
//then //then
@ -126,8 +124,7 @@ public class ElasticsearchTemplateTest {
elasticsearchTemplate.index(indexQuery); elasticsearchTemplate.index(indexQuery);
elasticsearchTemplate.refresh(SampleEntity.class, true); elasticsearchTemplate.refresh(SampleEntity.class, true);
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
searchQuery.setElasticsearchQuery(matchAllQuery());
//when //when
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class); Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery, SampleEntity.class);
//then //then
@ -167,8 +164,7 @@ public class ElasticsearchTemplateTest {
elasticsearchTemplate.bulkIndex(indexQueries); elasticsearchTemplate.bulkIndex(indexQueries);
elasticsearchTemplate.refresh(SampleEntity.class,true); elasticsearchTemplate.refresh(SampleEntity.class,true);
//then //then
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
searchQuery.setElasticsearchQuery(matchAllQuery());
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class); Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class);
assertThat(sampleEntities.getTotalElements(), is(equalTo(2L))); assertThat(sampleEntities.getTotalElements(), is(equalTo(2L)));
} }
@ -191,8 +187,7 @@ public class ElasticsearchTemplateTest {
elasticsearchTemplate.delete("test-index","test-type",documentId); elasticsearchTemplate.delete("test-index","test-type",documentId);
elasticsearchTemplate.refresh(SampleEntity.class, true); elasticsearchTemplate.refresh(SampleEntity.class, true);
//then //then
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id", documentId)).build();
searchQuery.setElasticsearchQuery(fieldQuery("id", documentId));
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class); Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class);
assertThat(sampleEntities.getTotalElements(), equalTo(0L)); assertThat(sampleEntities.getTotalElements(), equalTo(0L));
} }
@ -215,8 +210,7 @@ public class ElasticsearchTemplateTest {
elasticsearchTemplate.delete(SampleEntity.class,documentId); elasticsearchTemplate.delete(SampleEntity.class,documentId);
elasticsearchTemplate.refresh(SampleEntity.class, true); elasticsearchTemplate.refresh(SampleEntity.class, true);
//then //then
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id", documentId)).build();
searchQuery.setElasticsearchQuery(fieldQuery("id", documentId));
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class); Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class);
assertThat(sampleEntities.getTotalElements(), equalTo(0L)); assertThat(sampleEntities.getTotalElements(), equalTo(0L));
} }
@ -237,17 +231,16 @@ public class ElasticsearchTemplateTest {
elasticsearchTemplate.index(indexQuery); elasticsearchTemplate.index(indexQuery);
//when //when
DeleteQuery deleteQuery = new DeleteQuery(); DeleteQuery deleteQuery = new DeleteQuery();
deleteQuery.setElasticsearchQuery(fieldQuery("id", documentId)); deleteQuery.setQuery(fieldQuery("id", documentId));
elasticsearchTemplate.delete(deleteQuery,SampleEntity.class); elasticsearchTemplate.delete(deleteQuery,SampleEntity.class);
//then //then
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fieldQuery("id",documentId)).build();
searchQuery.setElasticsearchQuery(fieldQuery("id",documentId));
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class); Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class);
assertThat(sampleEntities.getTotalElements(), equalTo(0L)); assertThat(sampleEntities.getTotalElements(), equalTo(0L));
} }
@Test @Test
public void shouldFilterSearchResultsGivenFilter(){ public void shouldFilterSearchResultsForGivenFilter(){
//given //given
String documentId = randomNumeric(5); String documentId = randomNumeric(5);
SampleEntity sampleEntity = new SampleEntity(); SampleEntity sampleEntity = new SampleEntity();
@ -261,9 +254,10 @@ public class ElasticsearchTemplateTest {
elasticsearchTemplate.index(indexQuery); elasticsearchTemplate.index(indexQuery);
elasticsearchTemplate.refresh(SampleEntity.class, true); elasticsearchTemplate.refresh(SampleEntity.class, true);
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder()
searchQuery.setElasticsearchQuery(matchAllQuery()); .withQuery(matchAllQuery())
searchQuery.setElasticsearchFilter(boolFilter().must(termFilter("id", documentId))); .withFilter(boolFilter().must(termFilter("id", documentId)))
.build();
//when //when
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class); Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class);
//then //then
@ -317,11 +311,10 @@ public class ElasticsearchTemplateTest {
elasticsearchTemplate.bulkIndex(indexQueries); elasticsearchTemplate.bulkIndex(indexQueries);
elasticsearchTemplate.refresh(SampleEntity.class, true); elasticsearchTemplate.refresh(SampleEntity.class, true);
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder()
searchQuery.setElasticsearchQuery(matchAllQuery()); .withQuery(matchAllQuery())
SortBuilder sortBuilder = new FieldSortBuilder("rate").ignoreUnmapped(true).order(SortOrder.ASC); .withSort(new FieldSortBuilder("rate").ignoreUnmapped(true).order(SortOrder.ASC))
.build();
searchQuery.setElasticsearchSort(sortBuilder);
//when //when
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class); Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class);
//then //then
@ -473,11 +466,12 @@ public class ElasticsearchTemplateTest {
elasticsearchTemplate.index(indexQuery); elasticsearchTemplate.index(indexQuery);
elasticsearchTemplate.refresh(SampleEntity.class, true); elasticsearchTemplate.refresh(SampleEntity.class, true);
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder()
searchQuery.setElasticsearchQuery(matchAllQuery()); .withQuery(matchAllQuery())
searchQuery.addFields("message"); .withIndices("test-index")
searchQuery.addIndices("test-index"); .withTypes("test-type")
searchQuery.addTypes("test-type"); .withFields("message")
.build();
//when //when
Page<String> page = elasticsearchTemplate.queryForPage(searchQuery, new ResultsMapper<String>() { Page<String> page = elasticsearchTemplate.queryForPage(searchQuery, new ResultsMapper<String>() {
@Override @Override
@ -575,11 +569,12 @@ public class ElasticsearchTemplateTest {
elasticsearchTemplate.refresh(SampleEntity.class,true); elasticsearchTemplate.refresh(SampleEntity.class,true);
//then //then
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder()
searchQuery.addIndices("test-index"); .withQuery(matchAllQuery())
searchQuery.addTypes("test-type"); .withIndices("test-index")
searchQuery.setElasticsearchQuery(matchAllQuery()); .withTypes("test-type")
searchQuery.setPageable(new PageRequest(0,1)); .withPageable(new PageRequest(0,1))
.build();
String scrollId = elasticsearchTemplate.scan(searchQuery,1000,false); String scrollId = elasticsearchTemplate.scan(searchQuery,1000,false);
List<SampleEntity> sampleEntities = new ArrayList<SampleEntity>(); List<SampleEntity> sampleEntities = new ArrayList<SampleEntity>();

View File

@ -51,7 +51,7 @@ public class CriteriaQueryTest {
public void before(){ public void before(){
elasticsearchTemplate.createIndex(SampleEntity.class); elasticsearchTemplate.createIndex(SampleEntity.class);
DeleteQuery deleteQuery = new DeleteQuery(); DeleteQuery deleteQuery = new DeleteQuery();
deleteQuery.setElasticsearchQuery(matchAllQuery()); deleteQuery.setQuery(matchAllQuery());
elasticsearchTemplate.delete(deleteQuery,SampleEntity.class); elasticsearchTemplate.delete(deleteQuery,SampleEntity.class);
elasticsearchTemplate.refresh(SampleEntity.class, true); elasticsearchTemplate.refresh(SampleEntity.class, true);
} }

View File

@ -17,7 +17,6 @@ package org.springframework.data.elasticsearch.repositories;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -31,7 +30,6 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -58,7 +56,7 @@ public class CustomMethodRepositoryTest {
public void before(){ public void before(){
elasticsearchTemplate.createIndex(SampleEntity.class); elasticsearchTemplate.createIndex(SampleEntity.class);
DeleteQuery deleteQuery = new DeleteQuery(); DeleteQuery deleteQuery = new DeleteQuery();
deleteQuery.setElasticsearchQuery(matchAllQuery()); deleteQuery.setQuery(matchAllQuery());
elasticsearchTemplate.delete(deleteQuery,SampleEntity.class); elasticsearchTemplate.delete(deleteQuery,SampleEntity.class);
elasticsearchTemplate.refresh(SampleEntity.class, true); elasticsearchTemplate.refresh(SampleEntity.class, true);
} }

View File

@ -24,6 +24,7 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.SampleEntity; import org.springframework.data.elasticsearch.SampleEntity;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery; import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.data.elasticsearch.repositories.SampleElasticsearchRepository; import org.springframework.data.elasticsearch.repositories.SampleElasticsearchRepository;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
@ -162,8 +163,9 @@ public class SimpleElasticsearchRepositoryTest {
sampleEntity.setVersion(System.currentTimeMillis()); sampleEntity.setVersion(System.currentTimeMillis());
repository.save(sampleEntity); repository.save(sampleEntity);
SearchQuery query = new SearchQuery(); SearchQuery query = new NativeSearchQueryBuilder()
query.setElasticsearchQuery(termQuery("message", "test")); .withQuery(termQuery("message", "test"))
.build();
//when //when
Page<SampleEntity> page = repository.search(query); Page<SampleEntity> page = repository.search(query);
//then //then
@ -263,8 +265,9 @@ public class SimpleElasticsearchRepositoryTest {
sampleEntity.setVersion(System.currentTimeMillis()); sampleEntity.setVersion(System.currentTimeMillis());
repository.save(sampleEntity); repository.save(sampleEntity);
//when //when
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder()
searchQuery.setElasticsearchQuery(fieldQuery("id",documentId)); .withQuery(fieldQuery("id",documentId))
.build();
Page<SampleEntity> sampleEntities= repository.search(searchQuery); Page<SampleEntity> sampleEntities= repository.search(searchQuery);
//then //then
assertThat(sampleEntities.getTotalElements(), equalTo(1L)); assertThat(sampleEntities.getTotalElements(), equalTo(1L));
@ -275,8 +278,9 @@ public class SimpleElasticsearchRepositoryTest {
//when //when
repository.deleteAll(); repository.deleteAll();
//then //then
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder()
searchQuery.setElasticsearchQuery(matchAllQuery()); .withQuery(matchAllQuery())
.build();
Page<SampleEntity> sampleEntities= repository.search(searchQuery); Page<SampleEntity> sampleEntities= repository.search(searchQuery);
assertThat(sampleEntities.getTotalElements(), equalTo(0L)); assertThat(sampleEntities.getTotalElements(), equalTo(0L));
} }
@ -293,8 +297,9 @@ public class SimpleElasticsearchRepositoryTest {
//when //when
repository.delete(sampleEntity); repository.delete(sampleEntity);
//then //then
SearchQuery searchQuery = new SearchQuery(); SearchQuery searchQuery = new NativeSearchQueryBuilder()
searchQuery.setElasticsearchQuery(fieldQuery("id", documentId)); .withQuery(fieldQuery("id", documentId))
.build();
Page<SampleEntity> sampleEntities= repository.search(searchQuery); Page<SampleEntity> sampleEntities= repository.search(searchQuery);
assertThat(sampleEntities.getTotalElements(),equalTo(0L)); assertThat(sampleEntities.getTotalElements(),equalTo(0L));
} }