aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-05-03 13:29:36 +0200
committerJon Bratseth <bratseth@oath.com>2018-05-03 13:29:36 +0200
commit6f50b8b324a35b5aa929e04c0b043e97a93753a7 (patch)
treeee94abccc80216243a7dc4ca43bb10153481ffa5 /container-search
parent2c888efa6eda254932d1f97e3f17bae83751397f (diff)
Expect the right context
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/GroupingListHit.java8
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/vespa/HitConverter.java20
-rw-r--r--container-search/src/main/java/com/yahoo/search/result/Hit.java5
-rw-r--r--container-search/src/test/java/com/yahoo/search/grouping/vespa/HitConverterTestCase.java16
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");