summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne H Juul <arnej27959@users.noreply.github.com>2024-02-05 20:12:42 +0100
committerGitHub <noreply@github.com>2024-02-05 20:12:42 +0100
commit6eef2f69956fedf3556bf320a54502a94e56a20a (patch)
tree46052d6907feb505666207517d339aeb100665d9
parenta30640c1aed5cbe03b0e992936d39ca0263e93d4 (diff)
parent8933ae42a928d64fea5e5fa2e64258acda0e485a (diff)
Merge pull request #30182 from vespa-engine/arnej/empty-sorting-should-deactivate
giving an empty sorting spec should turn off sorting
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/Ranking.java8
-rw-r--r--container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java5
2 files changed, 11 insertions, 2 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/Ranking.java b/container-search/src/main/java/com/yahoo/search/query/Ranking.java
index 3c2a8a83c40..b1dd5624d18 100644
--- a/container-search/src/main/java/com/yahoo/search/query/Ranking.java
+++ b/container-search/src/main/java/com/yahoo/search/query/Ranking.java
@@ -233,7 +233,13 @@ public class Ranking implements Cloneable {
public Sorting getSorting() { return sorting; }
/** Sets how this query should be sorted. Set to null to turn off explicit sorting. */
- public void setSorting(Sorting sorting) { this.sorting = sorting; }
+ public void setSorting(Sorting sorting) {
+ if (sorting == null || sorting.fieldOrders().isEmpty()) {
+ this.sorting = null;
+ } else {
+ this.sorting = sorting;
+ }
+ }
/** Sets sorting from a string. See {@link Sorting} on syntax */
public void setSorting(String sortingString) {
diff --git a/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java b/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java
index 91acc883803..1003cd942a8 100644
--- a/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java
+++ b/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java
@@ -37,7 +37,10 @@ public class GlobalPhaseRanker {
var setup = globalPhaseSetupFor(query, schema).orElse(null);
if (setup == null) return Optional.empty();
var sorting = query.getRanking().getSorting();
- if (sorting == null || sorting.fieldOrders() == null) return Optional.empty();
+ if (sorting == null) return Optional.empty();
+ if (sorting.fieldOrders() == null || sorting.fieldOrders().isEmpty()) {
+ return Optional.of(ErrorMessage.createIllegalQuery("Invalid sorting for global phase"));
+ }
for (var fieldOrder : sorting.fieldOrders()) {
if (!fieldOrder.getSorter().getName().equals("[rank]")
|| fieldOrder.getSortOrder() != Sorting.Order.DESCENDING) {