use of com.yahoo.search.result.HitGroup in project vespa by vespa-engine.
the class FederationSearcherTest method require_that_hits_can_be_filled_when_moved.
@Test
public void require_that_hits_can_be_filled_when_moved() {
FederationTester tester = new FederationTester();
tester.addSearchChain("chain1", new AddHitSearcher());
tester.addSearchChain("chain2", new AddHitSearcher());
Result result = tester.search();
Result reorganizedResult = new Result(result.getQuery());
HitGroup hit1 = new HitGroup();
HitGroup nestedHitGroup = new HitGroup();
hit1.add(nestedHitGroup);
reorganizedResult.hits().add(hit1);
HitGroup chain1Group = (HitGroup) result.hits().get(0);
HitGroup chain2Group = (HitGroup) result.hits().get(1);
nestedHitGroup.add(chain1Group.get(0));
reorganizedResult.hits().add(chain2Group.get(0));
reorganizedResult.hits().add(nestedHitGroup);
tester.fill(reorganizedResult);
assertFilled(nestedHitGroup.get(0));
assertFilled(chain2Group.get(0));
}
use of com.yahoo.search.result.HitGroup in project vespa by vespa-engine.
the class DocumentXMLTemplate method header.
@Override
public void header(Context context, Writer writer) throws IOException {
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
writer.write("<result>\n");
HitGroup rootGroup = ((Result) context.get("result")).hits();
if (rootGroup.getField(VisitSearcher.VISITOR_CONTINUATION_TOKEN_FIELDNAME) != null) {
writer.write("<continuation>" + rootGroup.getField(VisitSearcher.VISITOR_CONTINUATION_TOKEN_FIELDNAME) + "</continuation>");
}
}
use of com.yahoo.search.result.HitGroup in project vespa by vespa-engine.
the class GetSearcherTestCase method testQueryPassThroughAndGetUnknownBackendHit.
@Test
public void testQueryPassThroughAndGetUnknownBackendHit() throws Exception {
DocumentSessionFactory factory = new DocumentSessionFactory(docType);
GetSearcher searcher = new GetSearcher(new FeedContext(new MessagePropertyProcessor(defFeedCfg, defLoadTypeCfg), factory, docMan, new ClusterList(), new NullFeedMetric()));
HitGroup hits = new HitGroup("mock");
hits.add(new Hit("blernsball"));
Chain<Searcher> searchChain = new Chain<>(searcher, new MockBackend(hits));
Result result = new Execution(searchChain, Execution.Context.createContextStub()).search(newQuery("?flarn=blern&id=userdoc:kittens:9:aaa"));
assertEquals(0, factory.messages.size());
assertNotNull(result.hits().getErrorHit());
assertRendered("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<result>\n" + "<errors>\n" + "<error type=\"searcher\" code=\"18\" message=\"Internal server error.: " + "A backend searcher to com.yahoo.storage.searcher.GetSearcher returned a " + "hit that was not an instance of com.yahoo.storage.searcher.DocumentHit. " + "Only DocumentHit instances are supported in the backend hit result set " + "when doing queries that contain document identifier sets recognised by the " + "Get Searcher.\"/>\n" + "</errors>\n" + "</result>\n", result);
}
use of com.yahoo.search.result.HitGroup in project vespa by vespa-engine.
the class FutureDataTestCase method testAsyncFederation.
@Test
public void testAsyncFederation() throws InterruptedException, ExecutionException, TimeoutException {
// Setup environment
AsyncProviderSearcher asyncProviderSearcher = new AsyncProviderSearcher();
Searcher syncProviderSearcher = new SyncProviderSearcher();
Chain<Searcher> asyncSource = new Chain<Searcher>(new ComponentId("async"), asyncProviderSearcher);
Chain<Searcher> syncSource = new Chain<>(new ComponentId("sync"), syncProviderSearcher);
SearchChainResolver searchChainResolver = new SearchChainResolver.Builder().addSearchChain(new ComponentId("sync"), new FederationOptions().setUseByDefault(true)).addSearchChain(new ComponentId("async"), new FederationOptions().setUseByDefault(true)).build();
Chain<Searcher> main = new Chain<Searcher>(new FederationSearcher(new ComponentId("federator"), searchChainResolver));
SearchChainRegistry searchChainRegistry = new SearchChainRegistry();
searchChainRegistry.register(main);
searchChainRegistry.register(syncSource);
searchChainRegistry.register(asyncSource);
Result result = new Execution(main, Execution.Context.createContextStub(searchChainRegistry, null)).search(new Query());
assertNotNull(result);
HitGroup syncGroup = (HitGroup) result.hits().get("source:sync");
assertNotNull(syncGroup);
HitGroup asyncGroup = (HitGroup) result.hits().get("source:async");
assertNotNull(asyncGroup);
assertEquals("Got all sync data", 3, syncGroup.size());
assertEquals("sync:0", syncGroup.get(0).getId().toString());
assertEquals("sync:1", syncGroup.get(1).getId().toString());
assertEquals("sync:2", syncGroup.get(2).getId().toString());
assertTrue(asyncGroup.incoming() == asyncProviderSearcher.incomingData);
assertEquals("Got no async data yet", 0, asyncGroup.size());
asyncProviderSearcher.simulateOneHitIOComplete(new Hit("async:0"));
assertEquals("Got no async data yet, as we haven't completed the incoming buffer and there is no data listener", 0, asyncGroup.size());
asyncProviderSearcher.simulateOneHitIOComplete(new Hit("async:1"));
asyncProviderSearcher.simulateAllHitsIOComplete();
assertEquals("Got no async data yet, as we haven't pulled it", 0, asyncGroup.size());
asyncGroup.complete().get();
assertEquals("Completed, so we have the data", 2, asyncGroup.size());
assertEquals("async:0", asyncGroup.get(0).getId().toString());
assertEquals("async:1", asyncGroup.get(1).getId().toString());
}
use of com.yahoo.search.result.HitGroup in project vespa by vespa-engine.
the class JsonRendererTestCase method test.
@Test
public final void test() throws IOException, InterruptedException, ExecutionException, JSONException {
String expected = "{\n" + " \"root\": {\n" + " \"children\": [\n" + " {\n" + " \"children\": [\n" + " {\n" + " \"fields\": {\n" + " \"c\": \"d\",\n" + " \"uri\": \"http://localhost/1\"\n" + " },\n" + " \"id\": \"http://localhost/1\",\n" + " \"relevance\": 0.9,\n" + " \"types\": [\n" + " \"summary\"\n" + " ]\n" + " }\n" + " ],\n" + " \"id\": \"usual\",\n" + " \"relevance\": 1.0\n" + " },\n" + " {\n" + " \"fields\": {\n" + " \"e\": \"f\"\n" + " },\n" + " \"id\": \"type grouphit\",\n" + " \"relevance\": 1.0,\n" + " \"types\": [\n" + " \"grouphit\"\n" + " ]\n" + " },\n" + " {\n" + " \"fields\": {\n" + " \"b\": \"foo\",\n" + " \"uri\": \"http://localhost/\"\n" + " },\n" + " \"id\": \"http://localhost/\",\n" + " \"relevance\": 0.95,\n" + " \"types\": [\n" + " \"summary\"\n" + " ]\n" + " }\n" + " ],\n" + " \"coverage\": {\n" + " \"coverage\": 100,\n" + " \"documents\": 500,\n" + " \"full\": true,\n" + " \"nodes\": 1,\n" + " \"results\": 1,\n" + " \"resultsFull\": 1\n" + " },\n" + " \"errors\": [\n" + " {\n" + " \"code\": 18,\n" + " \"message\": \"boom\",\n" + " \"summary\": \"Internal server error.\"\n" + " }\n" + " ],\n" + " \"fields\": {\n" + " \"totalCount\": 0\n" + " },\n" + " \"id\": \"toplevel\",\n" + " \"relevance\": 1.0\n" + " }\n" + "}";
Query q = new Query("/?query=a&tracelevel=5&reportCoverage=true");
Execution execution = new Execution(Execution.Context.createContextStub());
Result r = new Result(q);
r.setCoverage(new Coverage(500, 1, true));
FastHit h = new FastHit("http://localhost/", .95);
h.setField("$a", "Hello, world.");
h.setField("b", "foo");
r.hits().add(h);
HitGroup g = new HitGroup("usual");
h = new FastHit("http://localhost/1", .90);
h.setField("c", "d");
g.add(h);
r.hits().add(g);
HitGroup gg = new HitGroup("type grouphit");
gg.types().add("grouphit");
gg.setField("e", "f");
r.hits().add(gg);
r.hits().addError(ErrorMessage.createInternalServerError("boom"));
String summary = render(execution, r);
assertEqualJson(expected, summary);
}
Aggregations