Skip to content

Commit

Permalink
refactored, created searchQuery interface based, NativeSearchQueryBui…
Browse files Browse the repository at this point in the history
…lder support
  • Loading branch information
mohsinh committed Apr 21, 2013
1 parent f2325a9 commit 807b194
Show file tree
Hide file tree
Showing 13 changed files with 252 additions and 153 deletions.
Expand Up @@ -143,13 +143,13 @@ public <T> T queryForObject(StringQuery query, Class<T> clazz) {

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

@Override
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);
}

Expand All @@ -166,22 +166,22 @@ public <T> List<T> queryForList(StringQuery query, Class<T> clazz){

@Override
public <T> List<String> queryForIds(SearchQuery query) {
SearchRequestBuilder request = prepareSearch(query).setQuery(query.getElasticsearchQuery())
SearchRequestBuilder request = prepareSearch(query).setQuery(query.getQuery())
.setNoFields();
if(query.getElasticsearchFilter() != null){
request.setFilter(query.getElasticsearchFilter());
if(query.getFilter() != null){
request.setFilter(query.getFilter());
}
SearchResponse response = request.execute().actionGet();
return extractIds(response);
}

@Override
public <T> Page<T> queryForPage(CriteriaQuery query, Class<T> clazz) {
QueryBuilder elasticsearchQuery = new CriteriaQueryProcessor().createQueryFromCriteria(query.getCriteria());
SearchResponse response = prepareSearch(query,clazz)
.setQuery(elasticsearchQuery)
public <T> Page<T> queryForPage(CriteriaQuery criteriaQuery, Class<T> clazz) {
QueryBuilder query = new CriteriaQueryProcessor().createQueryFromCriteria(criteriaQuery.getCriteria());
SearchResponse response = prepareSearch(criteriaQuery,clazz)
.setQuery(query)
.execute().actionGet();
return mapResults(response, clazz, query.getPageable());
return mapResults(response, clazz, criteriaQuery.getPageable());
}

@Override
Expand All @@ -197,8 +197,8 @@ public <T> long count(SearchQuery query, Class<T> clazz) {
ElasticsearchPersistentEntity<T> persistentEntity = getPersistentEntityFor(clazz);
CountRequestBuilder countRequestBuilder = client.prepareCount(persistentEntity.getIndexName())
.setTypes(persistentEntity.getIndexType());
if(query.getElasticsearchQuery() != null){
countRequestBuilder.setQuery(query.getElasticsearchQuery());
if(query.getQuery() != null){
countRequestBuilder.setQuery(query.getQuery());
}
return countRequestBuilder.execute().actionGet().count();
}
Expand Down Expand Up @@ -254,30 +254,30 @@ public <T> String delete(Class<T> clazz, String id) {
}

@Override
public <T> void delete(DeleteQuery query, Class<T> clazz) {
public <T> void delete(DeleteQuery deleteQuery, Class<T> clazz) {
ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz);
client.prepareDeleteByQuery(persistentEntity.getIndexName())
.setTypes(persistentEntity.getIndexType())
.setQuery(query.getElasticsearchQuery())
.setQuery(deleteQuery.getQuery())
.execute().actionGet();
}

@Override
public String scan(SearchQuery query, long scrollTimeInMillis, boolean noFields) {
Assert.notNull(query.getIndices(), "No index defined for Query");
Assert.notNull(query.getTypes(), "No type define for Query");
Assert.notNull(query.getPageable(), "Query.pageable is required for scan & scroll");
public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noFields) {
Assert.notNull(searchQuery.getIndices(), "No index defined for Query");
Assert.notNull(searchQuery.getTypes(), "No type define for Query");
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)
.setQuery(query.getElasticsearchQuery())
.setTypes(toArray(query.getTypes()))
.setQuery(searchQuery.getQuery())
.setTypes(toArray(searchQuery.getTypes()))
.setScroll(TimeValue.timeValueMillis(scrollTimeInMillis))
.setFrom(0)
.setSize(query.getPageable().getPageSize());
.setSize(searchQuery.getPageable().getPageSize());

if(query.getElasticsearchFilter() != null){
requestBuilder.setFilter(query.getElasticsearchFilter());
if(searchQuery.getFilter() != null){
requestBuilder.setFilter(searchQuery.getFilter());
}

if(noFields){
Expand Down
Expand Up @@ -15,7 +15,6 @@
*/
package org.springframework.data.elasticsearch.core.query;

import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.util.Assert;
Expand Down
Expand Up @@ -25,7 +25,7 @@
* @author Rizwan Idrees
* @author Mohsin Husen
*/
public class CriteriaQuery extends AbstractQuery implements Query {
public class CriteriaQuery extends AbstractQuery{

private Criteria criteria;
private CriteriaQuery() {
Expand Down
Expand Up @@ -25,13 +25,13 @@
*/
public class DeleteQuery{

private QueryBuilder elasticsearchQuery;
private QueryBuilder query;

public QueryBuilder getElasticsearchQuery() {
return elasticsearchQuery;
public QueryBuilder getQuery() {
return query;
}

public void setElasticsearchQuery(QueryBuilder elasticsearchQuery) {
this.elasticsearchQuery = elasticsearchQuery;
public void setQuery(QueryBuilder query) {
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;


import org.elasticsearch.index.query.FilterBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.sort.SortBuilder;

/**
* SearchQuery
*
* @author Rizwan Idrees
* @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;
}
public interface SearchQuery extends Query {
QueryBuilder getQuery();
FilterBuilder getFilter();
SortBuilder getElasticsearchSort();
}
Expand Up @@ -35,9 +35,9 @@ public interface ElasticsearchRepository<T, ID extends Serializable> extends Ela

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

Expand Down

0 comments on commit 807b194

Please sign in to comment.