summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4SearchInvoker.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4SearchInvoker.java')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4SearchInvoker.java63
1 files changed, 15 insertions, 48 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4SearchInvoker.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4SearchInvoker.java
index 33715921e6d..f3867288b29 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4SearchInvoker.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FS4SearchInvoker.java
@@ -18,6 +18,8 @@ import com.yahoo.prelude.ConfigurationException;
import com.yahoo.processing.request.CompoundName;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
+import com.yahoo.search.dispatch.InvokerResult;
+import com.yahoo.search.dispatch.LeanHit;
import com.yahoo.search.dispatch.ResponseMonitor;
import com.yahoo.search.dispatch.SearchInvoker;
import com.yahoo.search.dispatch.searchcluster.Node;
@@ -89,7 +91,7 @@ public class FS4SearchInvoker extends SearchInvoker implements ResponseMonitor<F
}
@Override
- protected Result getSearchResult(Execution execution) throws IOException {
+ protected InvokerResult getSearchResult(Execution execution) throws IOException {
if (pendingSearchError != null) {
return errorResult(query, pendingSearchError);
}
@@ -117,11 +119,10 @@ public class FS4SearchInvoker extends SearchInvoker implements ResponseMonitor<F
if (query.getPresentation().getSummary() == null)
query.getPresentation().setSummary(searcher.getDefaultDocsumClass());
- Result result = new Result(query);
+ InvokerResult result = new InvokerResult(query, resultPacket.getDocumentCount());
- ensureResultHitCapacity(result, resultPacket);
- addMetaInfo(query, queryPacket.getQueryPacketData(), resultPacket, result);
- addUnfilledHits(result, resultPacket.getDocuments(), queryPacket.getQueryPacketData());
+ addMetaInfo(query, queryPacket.getQueryPacketData(), resultPacket, result.getResult());
+ addUnfilledHits(result.getLeanHits(), resultPacket.getDocuments(), queryPacket.getQueryPacketData());
return result;
}
@@ -138,14 +139,6 @@ public class FS4SearchInvoker extends SearchInvoker implements ResponseMonitor<F
return queryPacket;
}
- private void ensureResultHitCapacity(Result result, QueryResultPacket resultPacket) {
- int hitCount = resultPacket.getDocumentCount();
- if (resultPacket.getGroupData() != null) {
- hitCount++;
- }
- result.hits().ensureCapacity(hitCount);
- }
-
private void addMetaInfo(Query query, QueryPacketData queryPacketData, QueryResultPacket resultPacket, Result result) {
result.setTotalHitCount(resultPacket.getTotalDocumentCount());
@@ -192,47 +185,21 @@ public class FS4SearchInvoker extends SearchInvoker implements ResponseMonitor<F
/**
* Creates unfilled hits from a List of DocumentInfo instances.
*/
- private void addUnfilledHits(Result result, List<DocumentInfo> documents, QueryPacketData queryPacketData) {
- Query myQuery = result.getQuery();
- Sorting sorting = myQuery.getRanking().getSorting();
+ private void addUnfilledHits(List<LeanHit> result, List<DocumentInfo> documents, QueryPacketData queryPacketData) {
Optional<Integer> channelDistributionKey = distributionKey();
for (DocumentInfo document : documents) {
-
- try {
- FastHit hit = new FastHit();
- hit.setQuery(myQuery);
- if (queryPacketData != null)
- hit.setQueryPacketData(queryPacketData);
-
- hit.setFillable();
- hit.setCached(false);
-
- extractDocumentInfo(hit, document, sorting);
- channelDistributionKey.ifPresent(hit::setDistributionKey);
-
- result.hits().add(hit);
- } catch (ConfigurationException e) {
- log.log(LogLevel.WARNING, "Skipping hit", e);
- } catch (Exception e) {
- log.log(LogLevel.ERROR, "Skipping malformed hit", e);
- }
+ byte [] sortData = document.getSortData();
+ LeanHit hit = (sortData == null)
+ ? new LeanHit(document.getRawGlobalId(), document.getPartId(), channelDistributionKey.orElse(document.getDistributionKey()), document.getMetric())
+ : new LeanHit(document.getRawGlobalId(), document.getPartId(), channelDistributionKey.orElse(document.getDistributionKey()), document.getSortData());
+ if (queryPacketData != null) {
+ hit.setQueryPacketData(queryPacketData);
+ }
+ result.add(hit);
}
}
- private void extractDocumentInfo(FastHit hit, DocumentInfo document, Sorting sorting) {
- hit.setSource(getName());
-
- Number rank = document.getMetric();
-
- hit.setRelevance(new Relevance(rank.doubleValue()));
-
- hit.setDistributionKey(document.getDistributionKey());
- hit.setGlobalId(document.getRawGlobalId());
- hit.setPartId(document.getPartId());
- hit.setSortData(document.getSortData(), sorting);
- }
-
@Override
public void release() {
if (channel != null) {