mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-23 12:32:10 +00:00
refactored, created searchQuery interface based, NativeSearchQueryBuilder support
This commit is contained in:
parent
f2325a94bd
commit
807b194e80
@ -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){
|
||||||
|
@ -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;
|
||||||
|
@ -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() {
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>();
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user