summaryrefslogtreecommitdiffstats
path: root/container-search/src
diff options
context:
space:
mode:
authorArne Juul <arnej@vespa.ai>2024-02-05 13:04:05 +0000
committerArne Juul <arnej@vespa.ai>2024-02-05 13:53:48 +0000
commit8933ae42a928d64fea5e5fa2e64258acda0e485a (patch)
treeb5bbdf7c04b64756344e2301e64ac3453b1e64d3 /container-search/src
parent964deac9f61da6e3cbbbdadb6a3cee14448ec4b6 (diff)
giving an empty sorting spec should turn off sorting
Diffstat (limited to 'container-search/src')
-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) {