aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/test/java/com/yahoo/search/significance/test/SignificanceSearcherTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/test/java/com/yahoo/search/significance/test/SignificanceSearcherTest.java')
-rw-r--r--container-search/src/test/java/com/yahoo/search/significance/test/SignificanceSearcherTest.java80
1 files changed, 74 insertions, 6 deletions
diff --git a/container-search/src/test/java/com/yahoo/search/significance/test/SignificanceSearcherTest.java b/container-search/src/test/java/com/yahoo/search/significance/test/SignificanceSearcherTest.java
index 890db3abb51..eaa66755608 100644
--- a/container-search/src/test/java/com/yahoo/search/significance/test/SignificanceSearcherTest.java
+++ b/container-search/src/test/java/com/yahoo/search/significance/test/SignificanceSearcherTest.java
@@ -2,6 +2,7 @@
package com.yahoo.search.significance.test;
import com.yahoo.component.chain.Chain;
+import com.yahoo.config.subscription.ConfigGetter;
import com.yahoo.language.Language;
import com.yahoo.language.significance.SignificanceModel;
import com.yahoo.language.significance.SignificanceModelRegistry;
@@ -10,12 +11,19 @@ import com.yahoo.prelude.query.AndItem;
import com.yahoo.prelude.query.WordItem;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
+import com.yahoo.search.schema.DocumentSummary;
+import com.yahoo.search.schema.RankProfile;
+import com.yahoo.search.schema.Schema;
+import com.yahoo.search.schema.SchemaInfo;
import com.yahoo.search.searchchain.Execution;
import com.yahoo.search.significance.SignificanceSearcher;
+import com.yahoo.vespa.config.search.RankProfilesConfig;
import org.junit.jupiter.api.Test;
import java.nio.file.Path;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import static com.yahoo.test.JunitCompat.assertEquals;
@@ -29,12 +37,18 @@ public class SignificanceSearcherTest {
SignificanceModelRegistry significanceModelRegistry;
SignificanceSearcher searcher;
- public SignificanceSearcherTest() {
- HashMap<Language, Path> map = new HashMap<>();
- map.put(Language.ENGLISH, Path.of("src/test/java/com/yahoo/search/significance/model/en.json"));
- significanceModelRegistry = new DefaultSignificanceModelRegistry(map);
- searcher = new SignificanceSearcher(significanceModelRegistry);
+ public SignificanceSearcherTest() {
+ List<Path> models = new ArrayList<>();
+ models.add(Path.of("src/test/java/com/yahoo/search/significance/model/docv1.json"));
+ models.add(Path.of("src/test/java/com/yahoo/search/significance/model/docv2.json"));
+ var schema = new Schema.Builder("music")
+ .add(new DocumentSummary.Builder("default").build())
+ .add(new RankProfile.Builder("significance-ranking")
+ .setUseSignificanceModel(true)
+ .build());
+ significanceModelRegistry = new DefaultSignificanceModelRegistry(models);
+ searcher = new SignificanceSearcher(significanceModelRegistry, new SchemaInfo(List.of(schema.build()), List.of()));
}
private Execution createExecution(SignificanceSearcher searcher) {
@@ -47,8 +61,29 @@ public class SignificanceSearcherTest {
@Test
void testSignificanceValueOnSimpleQuery() {
+ Query q = new Query();
+ q.getRanking().setProfile("significance-ranking");
+ AndItem root = new AndItem();
+ WordItem tmp;
+ tmp = new WordItem("hello", true);
+ root.addItem(tmp);
+
+ q.getModel().getQueryTree().setRoot(root);
+
+ SignificanceModel model = significanceModelRegistry.getModel(Language.ENGLISH).get();
+ var helloFrequency = model.documentFrequency("hello");
+ var helloSignificanceValue = SignificanceSearcher.calculateIDF(helloFrequency.corpusSize(), helloFrequency.frequency());
+ Result r = createExecution(searcher).search(q);
+
+ root = (AndItem) r.getQuery().getModel().getQueryTree().getRoot();
+ WordItem w0 = (WordItem) root.getItem(0);
+ assertEquals(helloSignificanceValue, w0.getSignificance());
+ }
+ @Test
+ void testSignificanceValueOnSimpleANDQuery() {
Query q = new Query();
+ q.getRanking().setProfile("significance-ranking");
AndItem root = new AndItem();
WordItem tmp;
tmp = new WordItem("Hello", true);
@@ -79,6 +114,7 @@ public class SignificanceSearcherTest {
@Test
void testSignificanceValueOnRecursiveQuery() {
Query q = new Query();
+ q.getRanking().setProfile("significance-ranking");
AndItem root = new AndItem();
WordItem child1 = new WordItem("hello", true);
@@ -117,7 +153,7 @@ public class SignificanceSearcherTest {
assertEquals(helloSignificanceValue, w0.getSignificance());
assertEquals(testSignificanceValue, w1.getSignificance());
- assertEquals(SignificanceSearcher.calculateIDF(10, 2), w3.getSignificance());
+ assertEquals(SignificanceSearcher.calculateIDF(16, 2), w3.getSignificance());
}
@@ -150,4 +186,36 @@ public class SignificanceSearcherTest {
assertEquals(w0_1.getSignificance(), w1.getSignificance());
}
+
+ @Test
+ public void failsOnConflictingSignificanceConfiguration() {
+ var musicSchema = new Schema.Builder("music")
+ .add(new DocumentSummary.Builder("default").build())
+ .add(new RankProfile.Builder("significance-ranking")
+ .setUseSignificanceModel(true)
+ .build())
+ .build();
+ var albumSchema = new Schema.Builder("album")
+ .add(new DocumentSummary.Builder("default").build())
+ .add(new RankProfile.Builder("significance-ranking")
+ .setUseSignificanceModel(false)
+ .build())
+ .build();
+ var searcher = new SignificanceSearcher(
+ significanceModelRegistry, new SchemaInfo(List.of(musicSchema, albumSchema), List.of()));
+
+ var query = new Query();
+ query.getRanking().setProfile("significance-ranking");
+
+ var result = createExecution(searcher).search(query);
+ assertEquals(1, result.hits().getErrorHit().errors().size());
+
+ var errorMessage = result.hits().getError();
+ assertEquals("Inconsistent 'significance' configuration for the rank profile 'significance-ranking' in the schemas [music, album]. " +
+ "Use 'restrict' to limit the query to a subset of schemas " +
+ "(https://docs.vespa.ai/en/schemas.html#multiple-schemas). " +
+ "Specify same 'significance' configuration for all selected schemas " +
+ "(https://docs.vespa.ai/en/reference/schema-reference.html#significance).",
+ errorMessage.getDetailedMessage());
+ }
}