diff options
author | tomglk <> | 2024-01-08 08:17:15 +0100 |
---|---|---|
committer | tomglk <> | 2024-01-08 08:17:15 +0100 |
commit | d33f2119651360228f52baa6c174d8f3e1e8bcb4 (patch) | |
tree | 122dc3d7643f10af990f1aa891b2b38ad68fc0fd /container-search | |
parent | 057e4a54614dfe11fbb5f8c4408d563706ce9aa7 (diff) |
Add test for missing field value for collapsefield.
Diffstat (limited to 'container-search')
-rw-r--r-- | container-search/src/test/java/com/yahoo/prelude/searcher/test/FieldCollapsingSearcherTestCase.java | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/container-search/src/test/java/com/yahoo/prelude/searcher/test/FieldCollapsingSearcherTestCase.java b/container-search/src/test/java/com/yahoo/prelude/searcher/test/FieldCollapsingSearcherTestCase.java index 5870cf30a6a..4c34a2fdb4c 100644 --- a/container-search/src/test/java/com/yahoo/prelude/searcher/test/FieldCollapsingSearcherTestCase.java +++ b/container-search/src/test/java/com/yahoo/prelude/searcher/test/FieldCollapsingSearcherTestCase.java @@ -68,6 +68,82 @@ public class FieldCollapsingSearcherTestCase { assertEquals(1, checker.queryCount); } + /** + * Tests that we do not fail on documents with missing collapsefield + * and that they are kept in the result. + */ + @Test + void testFieldCollapsingWithCollapseFieldMissing() { + Map<Searcher, Searcher> chained = new HashMap<>(); + + // Set up + FieldCollapsingSearcher collapse = new FieldCollapsingSearcher(); + DocumentSourceSearcher docsource = new DocumentSourceSearcher(); + chained.put(collapse, docsource); + + // Caveat: Collapse is set to false, because that's what the + // collapser asks for + Query q = new Query("?query=test_collapse"); + // The searcher turns off collapsing further on in the chain + q.properties().set("collapse", "0"); + Result r = new Result(q); + r.hits().add(createHitWithoutFields("http://acme.org/a.html", 10)); + r.hits().add(createHitAmid("http://acme.org/b.html", 9, 1)); + r.hits().add(createHitWithoutFields("http://acme.org/c.html", 9)); + r.hits().add(createHitAmid("http://acme.org/d.html", 8, 2)); + r.hits().add(createHitAmid("http://acme.org/d.html", 7, 2)); + r.setTotalHitCount(5); + docsource.addResult(q, r); + + // Test basic collapsing on amid + q = new Query("?query=test_collapse&collapsefield=amid&collapsesize=1"); + r = doSearch(collapse, q, 0, 10, chained); + + assertEquals(4, r.getHitCount()); + assertEquals(1, docsource.getQueryCount()); + + assertHitWithoutFields("http://acme.org/a.html", 10, r.hits().get(0)); + assertHitAmid("http://acme.org/b.html", 9, 1, r.hits().get(1)); + assertHitWithoutFields("http://acme.org/c.html", 9, r.hits().get(2)); + assertHitAmid("http://acme.org/d.html", 8, 2, r.hits().get(3)); + } + + @Test + void testFieldCollapsingOnMultipleFieldsWithCollapseFieldsMissing() { + Map<Searcher, Searcher> chained = new HashMap<>(); + + // Set up + FieldCollapsingSearcher collapse = new FieldCollapsingSearcher(); + DocumentSourceSearcher docsource = new DocumentSourceSearcher(); + chained.put(collapse, docsource); + + // Caveat: Collapse is set to false, because that's what the + // collapser asks for + Query q = new Query("?query=test_collapse"); + // The searcher turns off collapsing further on in the chain + q.properties().set("collapse", "0"); + Result r = new Result(q); + r.hits().add(createHitWithoutFields("http://acme.org/a.html", 10)); // - - + r.hits().add(createHitBmid("http://acme.org/b.html", 9, 1)); // - 1 + r.hits().add(createHitAmid("http://acme.org/c.html", 9, 1)); // 1 - + r.hits().add(createHitBmid("http://acme.org/d.html", 8, 1)); // - 1 + r.hits().add(createHit("http://acme.org/e.html", 8, 2, 2)); // 2 2 + r.setTotalHitCount(5); + docsource.addResult(q, r); + + // Test basic collapsing + q = new Query("?query=test_collapse&collapsefield=amid,bmid&collapsesize=1"); + r = doSearch(collapse, q, 0, 10, chained); + + assertEquals(4, r.getHitCount()); + assertEquals(1, docsource.getQueryCount()); + + assertHitWithoutFields("http://acme.org/a.html", 10, r.hits().get(0)); + assertHitBmid("http://acme.org/b.html", 9, 1, r.hits().get(1)); + assertHitAmid("http://acme.org/c.html", 9, 1, r.hits().get(2)); + assertHit("http://acme.org/e.html", 8, 2, 2, r.hits().get(3)); + } + @Test void testFieldCollapsing() { Map<Searcher, Searcher> chained = new HashMap<>(); @@ -551,12 +627,22 @@ public class FieldCollapsingSearcherTestCase { } } + private FastHit createHitWithoutFields(String uri, int relevancy) { + return new FastHit(uri,relevancy); + } + private FastHit createHitAmid(String uri,int relevancy,int amid) { FastHit hit = new FastHit(uri,relevancy); hit.setField("amid", String.valueOf(amid)); return hit; } + private FastHit createHitBmid(String uri,int relevancy,int bmid) { + FastHit hit = new FastHit(uri,relevancy); + hit.setField("bmid", String.valueOf(bmid)); + return hit; + } + private FastHit createHit(String uri,int relevancy,int amid,int bmid) { FastHit hit = new FastHit(uri,relevancy); hit.setField("amid", String.valueOf(amid)); @@ -564,12 +650,24 @@ public class FieldCollapsingSearcherTestCase { return hit; } + private void assertHitWithoutFields(String uri,int relevancy,Hit hit) { + assertEquals(uri,hit.getId().toString()); + assertEquals(relevancy, ((int) hit.getRelevance().getScore())); + assertTrue(hit.fields().isEmpty()); + } + private void assertHitAmid(String uri, int relevancy, int amid, Hit hit) { assertEquals(uri,hit.getId().toString()); assertEquals(relevancy, ((int) hit.getRelevance().getScore())); assertEquals(amid,Integer.parseInt((String) hit.getField("amid"))); } + private void assertHitBmid(String uri, int relevancy, int bmid, Hit hit) { + assertEquals(uri,hit.getId().toString()); + assertEquals(relevancy, ((int) hit.getRelevance().getScore())); + assertEquals(bmid,Integer.parseInt((String) hit.getField("bmid"))); + } + private void assertHit(String uri,int relevancy,int amid,int bmid,Hit hit) { assertHitAmid(uri,relevancy,amid,hit); assertEquals(bmid,Integer.parseInt((String) hit.getField("bmid"))); |