Skip to content

Commit 807b194

Browse files
committed
refactored, created searchQuery interface based, NativeSearchQueryBuilder support
1 parent f2325a9 commit 807b194

File tree

13 files changed

+252
-153
lines changed

13 files changed

+252
-153
lines changed

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,13 @@ public <T> T queryForObject(StringQuery query, Class<T> clazz) {
143143

144144
@Override
145145
public <T> Page<T> queryForPage(SearchQuery query, Class<T> clazz) {
146-
SearchResponse response = doSearch(prepareSearch(query,clazz), query.getElasticsearchQuery(), query.getElasticsearchFilter(),query.getElasticsearchSort());
146+
SearchResponse response = doSearch(prepareSearch(query,clazz), query.getQuery(), query.getFilter(), query.getElasticsearchSort());
147147
return mapResults(response, clazz, query.getPageable());
148148
}
149149

150150
@Override
151151
public <T> Page<T> queryForPage(SearchQuery query, ResultsMapper<T> resultsMapper) {
152-
SearchResponse response = doSearch(prepareSearch(query), query.getElasticsearchQuery(), query.getElasticsearchFilter(),query.getElasticsearchSort());
152+
SearchResponse response = doSearch(prepareSearch(query), query.getQuery(), query.getFilter(), query.getElasticsearchSort());
153153
return resultsMapper.mapResults(response);
154154
}
155155

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

167167
@Override
168168
public <T> List<String> queryForIds(SearchQuery query) {
169-
SearchRequestBuilder request = prepareSearch(query).setQuery(query.getElasticsearchQuery())
169+
SearchRequestBuilder request = prepareSearch(query).setQuery(query.getQuery())
170170
.setNoFields();
171-
if(query.getElasticsearchFilter() != null){
172-
request.setFilter(query.getElasticsearchFilter());
171+
if(query.getFilter() != null){
172+
request.setFilter(query.getFilter());
173173
}
174174
SearchResponse response = request.execute().actionGet();
175175
return extractIds(response);
176176
}
177177

178178
@Override
179-
public <T> Page<T> queryForPage(CriteriaQuery query, Class<T> clazz) {
180-
QueryBuilder elasticsearchQuery = new CriteriaQueryProcessor().createQueryFromCriteria(query.getCriteria());
181-
SearchResponse response = prepareSearch(query,clazz)
182-
.setQuery(elasticsearchQuery)
179+
public <T> Page<T> queryForPage(CriteriaQuery criteriaQuery, Class<T> clazz) {
180+
QueryBuilder query = new CriteriaQueryProcessor().createQueryFromCriteria(criteriaQuery.getCriteria());
181+
SearchResponse response = prepareSearch(criteriaQuery,clazz)
182+
.setQuery(query)
183183
.execute().actionGet();
184-
return mapResults(response, clazz, query.getPageable());
184+
return mapResults(response, clazz, criteriaQuery.getPageable());
185185
}
186186

187187
@Override
@@ -197,8 +197,8 @@ public <T> long count(SearchQuery query, Class<T> clazz) {
197197
ElasticsearchPersistentEntity<T> persistentEntity = getPersistentEntityFor(clazz);
198198
CountRequestBuilder countRequestBuilder = client.prepareCount(persistentEntity.getIndexName())
199199
.setTypes(persistentEntity.getIndexType());
200-
if(query.getElasticsearchQuery() != null){
201-
countRequestBuilder.setQuery(query.getElasticsearchQuery());
200+
if(query.getQuery() != null){
201+
countRequestBuilder.setQuery(query.getQuery());
202202
}
203203
return countRequestBuilder.execute().actionGet().count();
204204
}
@@ -254,30 +254,30 @@ public <T> String delete(Class<T> clazz, String id) {
254254
}
255255

256256
@Override
257-
public <T> void delete(DeleteQuery query, Class<T> clazz) {
257+
public <T> void delete(DeleteQuery deleteQuery, Class<T> clazz) {
258258
ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz);
259259
client.prepareDeleteByQuery(persistentEntity.getIndexName())
260260
.setTypes(persistentEntity.getIndexType())
261-
.setQuery(query.getElasticsearchQuery())
261+
.setQuery(deleteQuery.getQuery())
262262
.execute().actionGet();
263263
}
264264

265265
@Override
266-
public String scan(SearchQuery query, long scrollTimeInMillis, boolean noFields) {
267-
Assert.notNull(query.getIndices(), "No index defined for Query");
268-
Assert.notNull(query.getTypes(), "No type define for Query");
269-
Assert.notNull(query.getPageable(), "Query.pageable is required for scan & scroll");
266+
public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noFields) {
267+
Assert.notNull(searchQuery.getIndices(), "No index defined for Query");
268+
Assert.notNull(searchQuery.getTypes(), "No type define for Query");
269+
Assert.notNull(searchQuery.getPageable(), "Query.pageable is required for scan & scroll");
270270

271-
SearchRequestBuilder requestBuilder = client.prepareSearch(toArray(query.getIndices()))
271+
SearchRequestBuilder requestBuilder = client.prepareSearch(toArray(searchQuery.getIndices()))
272272
.setSearchType(SCAN)
273-
.setQuery(query.getElasticsearchQuery())
274-
.setTypes(toArray(query.getTypes()))
273+
.setQuery(searchQuery.getQuery())
274+
.setTypes(toArray(searchQuery.getTypes()))
275275
.setScroll(TimeValue.timeValueMillis(scrollTimeInMillis))
276276
.setFrom(0)
277-
.setSize(query.getPageable().getPageSize());
277+
.setSize(searchQuery.getPageable().getPageSize());
278278

279-
if(query.getElasticsearchFilter() != null){
280-
requestBuilder.setFilter(query.getElasticsearchFilter());
279+
if(searchQuery.getFilter() != null){
280+
requestBuilder.setFilter(searchQuery.getFilter());
281281
}
282282

283283
if(noFields){

src/main/java/org/springframework/data/elasticsearch/core/query/AbstractQuery.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.springframework.data.elasticsearch.core.query;
1717

18-
import org.springframework.data.domain.PageRequest;
1918
import org.springframework.data.domain.Pageable;
2019
import org.springframework.data.domain.Sort;
2120
import org.springframework.util.Assert;

src/main/java/org/springframework/data/elasticsearch/core/query/CriteriaQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
* @author Rizwan Idrees
2626
* @author Mohsin Husen
2727
*/
28-
public class CriteriaQuery extends AbstractQuery implements Query {
28+
public class CriteriaQuery extends AbstractQuery{
2929

3030
private Criteria criteria;
3131
private CriteriaQuery() {

src/main/java/org/springframework/data/elasticsearch/core/query/DeleteQuery.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@
2525
*/
2626
public class DeleteQuery{
2727

28-
private QueryBuilder elasticsearchQuery;
28+
private QueryBuilder query;
2929

30-
public QueryBuilder getElasticsearchQuery() {
31-
return elasticsearchQuery;
30+
public QueryBuilder getQuery() {
31+
return query;
3232
}
3333

34-
public void setElasticsearchQuery(QueryBuilder elasticsearchQuery) {
35-
this.elasticsearchQuery = elasticsearchQuery;
34+
public void setQuery(QueryBuilder query) {
35+
this.query = query;
3636
}
3737
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright 2013 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.data.elasticsearch.core.query;
17+
18+
19+
import org.elasticsearch.index.query.FilterBuilder;
20+
import org.elasticsearch.index.query.QueryBuilder;
21+
import org.elasticsearch.search.sort.SortBuilder;
22+
23+
/**
24+
* NativeSearchQuery
25+
*
26+
* @author Rizwan Idrees
27+
* @author Mohsin Husen
28+
*/
29+
public class NativeSearchQuery extends AbstractQuery implements SearchQuery {
30+
31+
private QueryBuilder query;
32+
private FilterBuilder filter;
33+
private SortBuilder sort;
34+
35+
public NativeSearchQuery(QueryBuilder query, FilterBuilder filter, SortBuilder sort) {
36+
this.query = query;
37+
this.filter = filter;
38+
this.sort = sort;
39+
}
40+
41+
public QueryBuilder getQuery() {
42+
return query;
43+
}
44+
45+
46+
public FilterBuilder getFilter() {
47+
return filter;
48+
}
49+
50+
public SortBuilder getElasticsearchSort() {
51+
return sort;
52+
}
53+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/*
2+
* Copyright 2013 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.data.elasticsearch.core.query;
17+
18+
import org.elasticsearch.index.query.FilterBuilder;
19+
import org.elasticsearch.index.query.QueryBuilder;
20+
import org.elasticsearch.search.sort.SortBuilder;
21+
import org.springframework.data.domain.Pageable;
22+
23+
/**
24+
* NativeSearchQuery
25+
*
26+
* @author Rizwan Idrees
27+
* @author Mohsin Husen
28+
*/
29+
30+
public class NativeSearchQueryBuilder {
31+
32+
private QueryBuilder queryBuilder;
33+
private FilterBuilder filterBuilder;
34+
private SortBuilder sortBuilder;
35+
private Pageable pageable;
36+
private String[] indices;
37+
private String[] types;
38+
private String[] fields;
39+
40+
public NativeSearchQueryBuilder withQuery(QueryBuilder queryBuilder){
41+
this.queryBuilder = queryBuilder;
42+
return this;
43+
}
44+
45+
public NativeSearchQueryBuilder withFilter(FilterBuilder filterBuilder){
46+
this.filterBuilder = filterBuilder;
47+
return this;
48+
}
49+
50+
public NativeSearchQueryBuilder withSort(SortBuilder sortBuilder){
51+
this.sortBuilder = sortBuilder;
52+
return this;
53+
}
54+
55+
public NativeSearchQueryBuilder withPageable(Pageable pageable){
56+
this.pageable = pageable;
57+
return this;
58+
}
59+
60+
public NativeSearchQueryBuilder withIndices(String... indices){
61+
this.indices = indices;
62+
return this;
63+
}
64+
65+
public NativeSearchQueryBuilder withTypes(String... types){
66+
this.types = types;
67+
return this;
68+
}
69+
70+
public NativeSearchQueryBuilder withFields(String... fields){
71+
this.fields = fields;
72+
return this;
73+
}
74+
75+
public NativeSearchQuery build(){
76+
NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryBuilder,filterBuilder,sortBuilder);
77+
if(pageable != null){
78+
nativeSearchQuery.setPageable(pageable);
79+
}
80+
if(indices != null) {
81+
nativeSearchQuery.addIndices(indices);
82+
}
83+
if(types != null) {
84+
nativeSearchQuery.addTypes(types);
85+
}
86+
if(fields != null) {
87+
nativeSearchQuery.addFields(fields);
88+
}
89+
return nativeSearchQuery;
90+
}
91+
}
Lines changed: 4 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,11 @@
1-
/*
2-
* Copyright 2013 the original author or authors.
3-
*
4-
* Licensed under the Apache License, Version 2.0 (the "License");
5-
* you may not use this file except in compliance with the License.
6-
* You may obtain a copy of the License at
7-
*
8-
* http://www.apache.org/licenses/LICENSE-2.0
9-
*
10-
* Unless required by applicable law or agreed to in writing, software
11-
* distributed under the License is distributed on an "AS IS" BASIS,
12-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13-
* See the License for the specific language governing permissions and
14-
* limitations under the License.
15-
*/
161
package org.springframework.data.elasticsearch.core.query;
172

18-
193
import org.elasticsearch.index.query.FilterBuilder;
204
import org.elasticsearch.index.query.QueryBuilder;
215
import org.elasticsearch.search.sort.SortBuilder;
226

23-
/**
24-
* SearchQuery
25-
*
26-
* @author Rizwan Idrees
27-
* @author Mohsin Husen
28-
*/
29-
public class SearchQuery extends AbstractQuery{
30-
31-
private QueryBuilder elasticsearchQuery;
32-
private FilterBuilder elasticsearchFilter;
33-
private SortBuilder elasticsearchSort;
34-
35-
public QueryBuilder getElasticsearchQuery() {
36-
return elasticsearchQuery;
37-
}
38-
39-
public void setElasticsearchQuery(QueryBuilder elasticsearchQuery) {
40-
this.elasticsearchQuery = elasticsearchQuery;
41-
}
42-
43-
public FilterBuilder getElasticsearchFilter() {
44-
return elasticsearchFilter;
45-
}
46-
47-
public void setElasticsearchFilter(FilterBuilder elasticsearchFilter) {
48-
this.elasticsearchFilter = elasticsearchFilter;
49-
}
50-
51-
public SortBuilder getElasticsearchSort() {
52-
return elasticsearchSort;
53-
}
54-
55-
public void setElasticsearchSort(SortBuilder elasticsearchSort) {
56-
this.elasticsearchSort = elasticsearchSort;
57-
}
7+
public interface SearchQuery extends Query {
8+
QueryBuilder getQuery();
9+
FilterBuilder getFilter();
10+
SortBuilder getElasticsearchSort();
5811
}

src/main/java/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ public interface ElasticsearchRepository<T, ID extends Serializable> extends Ela
3535

3636
<S extends T> S index(S entity);
3737

38-
Iterable<T> search(QueryBuilder elasticsearchQuery);
38+
Iterable<T> search(QueryBuilder query);
3939

40-
Page<T> search(QueryBuilder elasticsearchQuery, Pageable pageable);
40+
Page<T> search(QueryBuilder query, Pageable pageable);
4141

4242
Page<T> search(SearchQuery searchQuery);
4343

0 commit comments

Comments
 (0)