func (tksc *TopScoreCollector) Collect(ctx context.Context, searcher search.Searcher) error { startTime := time.Now() var err error var next *search.DocumentMatch select { case <-ctx.Done(): return ctx.Err() default: next, err = searcher.Next() } for err == nil && next != nil { select { case <-ctx.Done(): return ctx.Err() default: tksc.collectSingle(next) if tksc.facetsBuilder != nil { err = tksc.facetsBuilder.Update(next) if err != nil { break } } next, err = searcher.Next() } } // compute search duration tksc.took = time.Since(startTime) if err != nil { return err } return nil }
// Collect goes to the index to find the matching documents func (hc *TopNCollector) Collect(ctx context.Context, searcher search.Searcher, reader index.IndexReader) error { startTime := time.Now() var err error var next *search.DocumentMatch // pre-allocate enough space in the DocumentMatchPool // unless the size + skip is too large, then cap it // everything should still work, just allocates DocumentMatches on demand backingSize := hc.size + hc.skip + 1 if hc.size+hc.skip > PreAllocSizeSkipCap { backingSize = PreAllocSizeSkipCap + 1 } searchContext := &search.SearchContext{ DocumentMatchPool: search.NewDocumentMatchPool(backingSize+searcher.DocumentMatchPoolSize(), len(hc.sort)), } select { case <-ctx.Done(): return ctx.Err() default: next, err = searcher.Next(searchContext) } for err == nil && next != nil { if hc.total%CheckDoneEvery == 0 { select { case <-ctx.Done(): return ctx.Err() default: } } if hc.facetsBuilder != nil { err = hc.facetsBuilder.Update(next) if err != nil { break } } err = hc.collectSingle(searchContext, reader, next) if err != nil { break } next, err = searcher.Next(searchContext) } // compute search duration hc.took = time.Since(startTime) if err != nil { return err } // finalize actual results err = hc.finalizeResults(reader) if err != nil { return err } return nil }
func (tksc *TopScoreCollector) Collect(searcher search.Searcher) error { startTime := time.Now() next, err := searcher.Next() for err == nil && next != nil { tksc.collectSingle(next) if tksc.facetsBuilder != nil { tksc.facetsBuilder.Update(next) } next, err = searcher.Next() } // compute search duration tksc.took = time.Since(startTime) if err != nil { return err } return nil }