diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-05-03 13:29:36 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-05-03 13:29:36 +0200 |
commit | 6f50b8b324a35b5aa929e04c0b043e97a93753a7 (patch) | |
tree | ee94abccc80216243a7dc4ca43bb10153481ffa5 /container-search | |
parent | 2c888efa6eda254932d1f97e3f17bae83751397f (diff) |
Expect the right context
Diffstat (limited to 'container-search')
4 files changed, 25 insertions, 24 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/GroupingListHit.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/GroupingListHit.java index c558a60adae..e57fe3a200e 100644 --- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/GroupingListHit.java +++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/GroupingListHit.java @@ -7,8 +7,8 @@ import com.yahoo.fs4.QueryPacketData; import com.yahoo.search.result.Hit; import com.yahoo.searchlib.aggregation.Grouping; -// TODO: Author! public class GroupingListHit extends Hit { + private static final long serialVersionUID = -6645125887873082234L; /** for unit tests only, may give problems if grouping contains docsums */ @@ -16,13 +16,12 @@ public class GroupingListHit extends Hit { this(groupingList, null); } - public GroupingListHit(List<Grouping> groupingList, - DocsumDefinitionSet defs) - { + public GroupingListHit(List<Grouping> groupingList, DocsumDefinitionSet defs) { super("meta:grouping", 0); this.groupingList = groupingList; this.defs = defs; } + public boolean isMeta() { return true; } public List<Grouping> getGroupingList() { return groupingList; } @@ -40,4 +39,5 @@ public class GroupingListHit extends Hit { public QueryPacketData getQueryPacketData() { return queryPacketData; } + } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/HitConverter.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/HitConverter.java index 7e848243c99..9db0215af36 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/HitConverter.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/HitConverter.java @@ -52,21 +52,13 @@ class HitConverter implements ResultBuilder.HitConverter { hit.setFillable(); hit.setSearcherSpecificMetaData(searcher, summaryClass); - Hit ctxHit = (Hit)groupHit.getContext(); - if (ctxHit == null) { + GroupingListHit hitContext = (GroupingListHit)groupHit.getContext(); + if (hitContext == null) throw new NullPointerException("Hit has no context."); - } - hit.setSource(ctxHit.getSource()); - hit.setQuery(ctxHit.getQuery()); - - if (ctxHit instanceof GroupingListHit) { - // in a live system the ctxHit can only by GroupingListHit, but because the code used Hit prior to version - // 5.10 we need to check to avoid breaking existing unit tests -- both internally and with customers - QueryPacketData queryPacketData = ((GroupingListHit)ctxHit).getQueryPacketData(); - if (queryPacketData != null) { - hit.setQueryPacketData(queryPacketData); - } - } + hit.setSource(hitContext.getSource()); + hit.setQuery(hitContext.getQuery()); + if (hitContext.getQueryPacketData() != null) + hit.setQueryPacketData(hitContext.getQueryPacketData()); return hit; } diff --git a/container-search/src/main/java/com/yahoo/search/result/Hit.java b/container-search/src/main/java/com/yahoo/search/result/Hit.java index 8b2c59ac24a..0664720c7d7 100644 --- a/container-search/src/main/java/com/yahoo/search/result/Hit.java +++ b/container-search/src/main/java/com/yahoo/search/result/Hit.java @@ -46,6 +46,9 @@ import java.util.stream.Collectors; */ public class Hit extends ListenableFreezableClass implements Data, Comparable<Hit>, Cloneable { + // Collection fields in hits are, when possible lazy because much of the work of a container + // consists of allocating and then garbage collecting hits + private static final String DOCUMENT_ID = "documentid"; /** A collection of string keyed object properties. */ @@ -61,7 +64,7 @@ public class Hit extends ListenableFreezableClass implements Data, Comparable<Hi private URI id; /** The types of this hit */ - private Set<String> types = new ArraySet<>(2); + private Set<String> types = new ArraySet<>(1); /** The relevance of this hit */ private Relevance relevance; diff --git a/container-search/src/test/java/com/yahoo/search/grouping/vespa/HitConverterTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/vespa/HitConverterTestCase.java index b1c1102f7de..d21562a2569 100644 --- a/container-search/src/test/java/com/yahoo/search/grouping/vespa/HitConverterTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/grouping/vespa/HitConverterTestCase.java @@ -19,6 +19,8 @@ import com.yahoo.searchlib.aggregation.FS4Hit; import com.yahoo.searchlib.aggregation.VdsHit; import org.junit.Test; +import java.util.Collections; + import static org.junit.Assert.*; /** @@ -33,18 +35,18 @@ public class HitConverterTestCase { @Test public void requireThatHitsAreConverted() { HitConverter converter = new HitConverter(new MySearcher(), new Query()); - Hit hit = converter.toSearchHit("default", new FS4Hit(1, createGlobalId(2), 3).setContext(new Hit("hit:ctx"))); + Hit hit = converter.toSearchHit("default", new FS4Hit(1, createGlobalId(2), 3).setContext(context())); assertNotNull(hit); assertEquals(new URI("index:null/1/" + FastHit.asHexString(createGlobalId(2))), hit.getId()); - hit = converter.toSearchHit("default", new FS4Hit(4, createGlobalId(5), 6).setContext(new Hit("hit:ctx"))); + hit = converter.toSearchHit("default", new FS4Hit(4, createGlobalId(5), 6).setContext(context())); assertNotNull(hit); assertEquals(new URI("index:null/4/" + FastHit.asHexString(createGlobalId(5))), hit.getId()); } @Test public void requireThatContextDataIsCopied() { - Hit ctxHit = new Hit("hit:ctx"); + Hit ctxHit = context(); ctxHit.setSource("69"); Query ctxQuery = new Query(); ctxHit.setQuery(ctxQuery); @@ -62,7 +64,7 @@ public class HitConverterTestCase { @Test public void requireThatHitTagIsCopiedFromGroupingListContext() { QueryPacketData ctxTag = new QueryPacketData(); - GroupingListHit ctxHit = new GroupingListHit(null, null); + GroupingListHit ctxHit = context(); ctxHit.setQueryPacketData(ctxTag); HitConverter converter = new HitConverter(new MySearcher(), new Query()); @@ -76,7 +78,7 @@ public class HitConverterTestCase { public void requireThatSummaryClassIsSet() { Searcher searcher = new MySearcher(); HitConverter converter = new HitConverter(searcher, new Query()); - Hit hit = converter.toSearchHit("69", new FS4Hit(1, createGlobalId(2), 3).setContext(new Hit("hit:ctx"))); + Hit hit = converter.toSearchHit("69", new FS4Hit(1, createGlobalId(2), 3).setContext(context())); assertNotNull(hit); assertTrue(hit instanceof FastHit); assertEquals("69", hit.getSearcherSpecificMetaData(searcher)); @@ -106,6 +108,10 @@ public class HitConverterTestCase { } } + private static GroupingListHit context() { + return new GroupingListHit(Collections.emptyList(), null); + } + private static DocumentdbInfoConfig.Documentdb sixtynine() { DocumentdbInfoConfig.Documentdb.Builder summaryConfig = new DocumentdbInfoConfig.Documentdb.Builder(); summaryConfig.name("none"); |