diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index 21b1d2e6d..1fdfaa454 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -991,7 +991,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati SearchRequestBuilder searchRequestBuilder = client.prepareSearch(toArray(query.getIndices())) .setSearchType(query.getSearchType()) .setTypes(toArray(query.getTypes())) - .setVersion(true); + .setVersion(true) + .setTrackScores(query.getTrackScores()); if (query.getSourceFilter() != null) { SourceFilter sourceFilter = query.getSourceFilter(); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/AbstractQuery.java b/src/main/java/org/springframework/data/elasticsearch/core/query/AbstractQuery.java index b8c74988e..c1917b8ba 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/AbstractQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/AbstractQuery.java @@ -15,10 +15,12 @@ */ package org.springframework.data.elasticsearch.core.query; -import static java.util.Collections.addAll; +import static java.util.Collections.*; + import java.util.ArrayList; import java.util.Collection; import java.util.List; + import org.elasticsearch.action.search.SearchType; import org.elasticsearch.action.support.IndicesOptions; import org.springframework.data.domain.Pageable; @@ -32,6 +34,7 @@ import org.springframework.util.Assert; * @author Mohsin Husen * @author Mark Paluch * @author Alen Turkovic + * @author Sascha Woo */ abstract class AbstractQuery implements Query { @@ -46,6 +49,7 @@ abstract class AbstractQuery implements Query { protected String route; protected SearchType searchType = SearchType.DFS_QUERY_THEN_FETCH; protected IndicesOptions indicesOptions; + protected boolean trackScores; @Override public Sort getSort() { @@ -160,4 +164,13 @@ abstract class AbstractQuery implements Query { public void setIndicesOptions(IndicesOptions indicesOptions) { this.indicesOptions = indicesOptions; } + + @Override + public boolean getTrackScores() { + return trackScores; + } + + public void setTrackScores(boolean trackScores) { + this.trackScores = trackScores; + } } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java index 8b1cb29b3..2b9fb73f5 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java @@ -36,12 +36,13 @@ import org.springframework.data.elasticsearch.core.facet.FacetRequest; * @author Artur Konczak * @author Mark Paluch * @author Alen Turkovic + * @author Sascha Woo */ public class NativeSearchQueryBuilder { private QueryBuilder queryBuilder; private QueryBuilder filterBuilder; - private List scriptFields = new ArrayList<>(); + private List scriptFields = new ArrayList<>(); private List sortBuilders = new ArrayList<>(); private List facetRequests = new ArrayList<>(); private List aggregationBuilders = new ArrayList<>(); @@ -53,6 +54,7 @@ public class NativeSearchQueryBuilder { private SourceFilter sourceFilter; private List indicesBoost; private float minScore; + private boolean trackScores; private Collection ids; private String route; private SearchType searchType; @@ -73,10 +75,10 @@ public class NativeSearchQueryBuilder { return this; } - public NativeSearchQueryBuilder withScriptField(ScriptField scriptField) { - this.scriptFields.add(scriptField); - return this; - } + public NativeSearchQueryBuilder withScriptField(ScriptField scriptField) { + this.scriptFields.add(scriptField); + return this; + } public NativeSearchQueryBuilder addAggregation(AbstractAggregationBuilder aggregationBuilder) { this.aggregationBuilders.add(aggregationBuilder); @@ -119,8 +121,8 @@ public class NativeSearchQueryBuilder { } public NativeSearchQueryBuilder withSourceFilter(SourceFilter sourceFilter) { - this.sourceFilter = sourceFilter; - return this; + this.sourceFilter = sourceFilter; + return this; } public NativeSearchQueryBuilder withMinScore(float minScore) { @@ -128,6 +130,11 @@ public class NativeSearchQueryBuilder { return this; } + public NativeSearchQueryBuilder withTrackScores(boolean trackScores) { + this.trackScores = trackScores; + return this; + } + public NativeSearchQueryBuilder withIds(Collection ids) { this.ids = ids; return this; @@ -149,8 +156,11 @@ public class NativeSearchQueryBuilder { } public NativeSearchQuery build() { - NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryBuilder, filterBuilder, sortBuilders, highlightFields); + NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryBuilder, filterBuilder, sortBuilders, + highlightFields); + nativeSearchQuery.setPageable(pageable); + nativeSearchQuery.setTrackScores(trackScores); if (indices != null) { nativeSearchQuery.addIndices(indices); @@ -168,13 +178,13 @@ public class NativeSearchQueryBuilder { nativeSearchQuery.addSourceFilter(sourceFilter); } - if(indicesBoost != null) { - nativeSearchQuery.setIndicesBoost(indicesBoost); + if (indicesBoost != null) { + nativeSearchQuery.setIndicesBoost(indicesBoost); } - if (!isEmpty(scriptFields)) { - nativeSearchQuery.setScriptFields(scriptFields); - } + if (!isEmpty(scriptFields)) { + nativeSearchQuery.setScriptFields(scriptFields); + } if (!isEmpty(facetRequests)) { nativeSearchQuery.setFacets(facetRequests); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java b/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java index c15e70b67..5f82e4d2a 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/Query.java @@ -30,6 +30,7 @@ import org.springframework.data.domain.Sort; * @author Mohsin Husen * @author Mark Paluch * @author Alen Turkovic + * @author Sascha Woo */ public interface Query { @@ -114,8 +115,7 @@ public interface Query { void addSourceFilter(SourceFilter sourceFilter); /** - * Get SourceFilter to be returned to get include and exclude source - * fields as part of search request. + * Get SourceFilter to be returned to get include and exclude source fields as part of search request. * * @return SourceFilter */ @@ -128,6 +128,13 @@ public interface Query { */ float getMinScore(); + /** + * Get if scores will be computed and tracked, regardless of whether sorting on a field. Defaults to false. + * + * @return + */ + boolean getTrackScores(); + /** * Get Ids * @@ -142,7 +149,6 @@ public interface Query { */ String getRoute(); - /** * Type of search *