void SearchShardsBase::collectPhaseOneResult() { FX_DEBUG("Collect phase one result"); size_t nTopDocs = ParameterClause::DEFAULT_TOPDOCS; ParameterClausePtr pParamClause = m_stat.getParameterClause(); if (pParamClause.isNotNull()) { nTopDocs = pParamClause->getTopDocs(); } if (m_pResultCollector.isNull() || m_pResultCollector->capacity() != nTopDocs) { m_pResultCollector.reset(new ResultCollectorImpl(nTopDocs)); } else { m_pResultCollector->clear(); } for (size_t i = 0; i < m_requestedShards.size(); ++i) { SearchShardBase* pShard = m_requestedShards[i]; const string& sResult = pShard->getResponse(); if (pShard->getStatus() != SearchReplicaBase::EC_OK) { stringstream ss; ss << "Has error on shard: [" << pShard->getName() << "]: " << parseError(sResult); setError(ss.str()); FX_LOG(WARN, ss.str().c_str()); return; } XMLResultParser parser; QueryResult queryResult; parser.parse(sResult, queryResult); queryResult.setShardId(pShard->getShardId()); m_pResultCollector->collect(queryResult); } doPhaseTwoSearch(); }