void TextIndexMergerTestCase::makeMergedAnswer(TermMap& mergedAnswer) { for (size_t j = 0; j < m_nNumEntries; ++j) { TermMap& ans = m_mergeEntries[j]->answer; for (TermMap::const_iterator it2 = ans.begin(); it2 != ans.end(); ++it2) { for (size_t l = 0; l < it2->second.size(); ++l) { if (m_mergeEntries[j]->pDocIdRemapper) { docid_t docId = it2->second[l].first; if (!m_mergeEntries[j]->pDocFilter->test((size_t)docId)) { docId = (*(m_mergeEntries[j]->pDocIdRemapper))[docId]; TermMap::iterator it = mergedAnswer.find(it2->first); if (it == mergedAnswer.end()) { DocVector docVect; mergedAnswer.insert(make_pair(it2->first, docVect)); it = mergedAnswer.find(it2->first); } it->second.push_back(make_pair(docId + m_mergeEntries[j]->newBaseDocId, it2->second[l].second)); } } else { TermMap::iterator it = mergedAnswer.find(it2->first); if (it == mergedAnswer.end()) { DocVector docVect; mergedAnswer.insert(make_pair(it2->first, docVect)); it = mergedAnswer.find(it2->first); } it->second.push_back(make_pair(it2->second[l].first + m_mergeEntries[j]->newBaseDocId, it2->second[l].second)); } // FX_TRACE("==term: %llu, doc: %d, first pos: %d", it2->first, it2->second[l].first, // it2->second[l].second[0]); } } } }
void TextIndexMergerTestCase::checkMergedResult(TermIteratorPtr& pTermIt, TermMap& answer) { CPPUNIT_ASSERT(pTermIt); CPPUNIT_ASSERT_EQUAL((int64_t)answer.size(), pTermIt->size()); size_t termCount = 0; while (pTermIt->hasNext()) { TermIterator::TermEntry entry = pTermIt->next(); const TextTermIterator::TermType* pTerm = dynamic_cast<const TextTermIterator::TermType*>(entry.term); CPPUNIT_ASSERT(pTerm != NULL); uint64_t hash = pTerm->getValue(); FX_TRACE("Term hash: %llu", hash); TermMap::const_iterator it = answer.find(hash); CPPUNIT_ASSERT(it != answer.end()); CPPUNIT_ASSERT_EQUAL(it->first, hash); const TermMeta& termMeta = entry.postingIterator->getTermMeta(); size_t df = it->second.size(); CPPUNIT_ASSERT_EQUAL((df_t)df, termMeta.getDocFreq()); ctf_t ctf = 0; for (size_t i = 0; i < df; ++i) { docid_t docId = entry.postingIterator->skipTo(it->second[i].first); CPPUNIT_ASSERT_EQUAL(it->second[i].first, docId); tf_t tf = it->second[i].second.size(); CPPUNIT_ASSERT_EQUAL(tf, entry.postingIterator->freq()); for (size_t j = 0; j < (size_t)tf; ++j) { loc_t posExp = it->second[i].second[j]; loc_t pos = entry.postingIterator->skipToPosition(posExp); CPPUNIT_ASSERT_EQUAL(posExp, pos); } ctf += it->second[i].second.size(); } CPPUNIT_ASSERT_EQUAL(ctf, termMeta.getCTF()); termCount++; } CPPUNIT_ASSERT_EQUAL(answer.size(), termCount); }