void QueryExecutor::execute(HitCollectorPtr& pCollector, ScorerPtr& pScorer, const QueryTracerPtr& pTracer) { //TODO: allocate from mempool MatchedDocSet machedDocs(m_pPool, DEFAULT_MATCHED_DOC_BUFFER_SIZE, size()); machedDocs.setTracer(pTracer); QueryFeature queryFeature; queryFeature.reserve(size()); extractFeature(queryFeature); pScorer->beginQuery(m_pFeatureProvider, queryFeature); while (advance(machedDocs) > 0) { FX_TRACE("Matched doc count: [%u]", (uint32_t)machedDocs.size()); pScorer->score(machedDocs); pCollector->collect(machedDocs); machedDocs.reset(); } pScorer->endQuery(); }