summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-07-04 15:36:32 +0200
committerTor Egge <Tor.Egge@online.no>2023-07-04 15:36:32 +0200
commitf49ff6ae01de4f04bb547eb85cc49c1c8828b145 (patch)
tree85253442c9f957c01246568ada7b33718f84a0a6 /container-search
parentb3abb357a1d64c19f9be1efeb60b43da244c4391 (diff)
Handle sorting on multivalue attributes.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/searcher/ValidateSortingSearcher.java3
-rw-r--r--container-search/src/main/java/com/yahoo/search/querytransform/SortingDegrader.java1
-rw-r--r--container-search/src/test/java/com/yahoo/search/querytransform/test/SortingDegraderTestCase.java13
3 files changed, 14 insertions, 3 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/searcher/ValidateSortingSearcher.java b/container-search/src/main/java/com/yahoo/prelude/searcher/ValidateSortingSearcher.java
index 701e5d57950..578fe7cf8cc 100644
--- a/container-search/src/main/java/com/yahoo/prelude/searcher/ValidateSortingSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/searcher/ValidateSortingSearcher.java
@@ -61,9 +61,6 @@ public class ValidateSortingSearcher extends Searcher {
HashMap<String, AttributesConfig.Attribute> attributes = new HashMap<>(config.attribute().size());
for (AttributesConfig.Attribute attr : config.attribute()) {
- if (AttributesConfig.Attribute.Collectiontype.SINGLE != attr.collectiontype()) {
- continue; // cannot sort on multivalue attributes
- }
attributes.put(attr.name(), attr);
}
setAttributeNames(attributes);
diff --git a/container-search/src/main/java/com/yahoo/search/querytransform/SortingDegrader.java b/container-search/src/main/java/com/yahoo/search/querytransform/SortingDegrader.java
index 81881685a1d..6a7e5f144b8 100644
--- a/container-search/src/main/java/com/yahoo/search/querytransform/SortingDegrader.java
+++ b/container-search/src/main/java/com/yahoo/search/querytransform/SortingDegrader.java
@@ -62,6 +62,7 @@ public class SortingDegrader extends Searcher {
if (index == null) return false;
if ( ! index.isFastSearch()) return false;
if ( ! index.isNumerical()) return false;
+ if ( index.isMultivalue()) return false;
return true;
}
diff --git a/container-search/src/test/java/com/yahoo/search/querytransform/test/SortingDegraderTestCase.java b/container-search/src/test/java/com/yahoo/search/querytransform/test/SortingDegraderTestCase.java
index 3b9c2651bf6..dc82b984bd4 100644
--- a/container-search/src/test/java/com/yahoo/search/querytransform/test/SortingDegraderTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/querytransform/test/SortingDegraderTestCase.java
@@ -97,6 +97,13 @@ public class SortingDegraderTestCase {
}
@Test
+ void testNoDegradingWhenMultiValueNumericAttribute() {
+ Query query = new Query("?ranking.sorting=%2ba3");
+ execute(query);
+ assertNull(query.getRanking().getMatchPhase().getAttribute());
+ }
+
+ @Test
void testNoDegradingWhenTurnedOff() {
Query query = new Query("?ranking.sorting=-a1%20-a2&sorting.degrading=false");
execute(query);
@@ -157,6 +164,11 @@ public class SortingDegraderTestCase {
fastSearchAttribute2.setFastSearch(true);
fastSearchAttribute2.setNumerical(true);
+ Index fastSearchAttribute3 = new Index("a3");
+ fastSearchAttribute3.setFastSearch(true);
+ fastSearchAttribute3.setNumerical(true);
+ fastSearchAttribute3.setMultivalue(true);
+
Index nonFastSearchAttribute = new Index("nonFastSearchAttribute");
nonFastSearchAttribute.setNumerical(true);
@@ -165,6 +177,7 @@ public class SortingDegraderTestCase {
test.addIndex(fastSearchAttribute1);
test.addIndex(fastSearchAttribute2);
+ test.addIndex(fastSearchAttribute3);
test.addIndex(nonFastSearchAttribute);
test.addIndex(stringAttribute);
return new IndexFacts(new IndexModel(test));