void QueryResult::init(const FieldSelector& selector, const IndexReaderPtr& pIndexReader, const QueryHits& hits) { StoredFieldsReaderPtr pStoredFieldsReader = pIndexReader->createStoredFieldsReader(); if (pStoredFieldsReader.isNull()) { return; } TimeProbe probe; probe.start(); m_docs.reserve(hits.size()); setTracer(hits.getTracer()); setTotalHits(hits.getTotalHits()); QueryHits::Iterator it = hits.iterator(); while (it.hasNext()) { const QueryHits::HitDoc& hitDoc = it.next(); ResultDocPtr pResDoc(new ResultDoc(hitDoc.getDocId(), hitDoc.getScore(), selector.size())); addDoc(pResDoc); pStoredFieldsReader->getDocument(selector, *pResDoc); } probe.stop(); FX_QUERY_TRACE(INFO, getTracer(), "fetch field time [%d] ms", (int32_t)probe.elapsed() / 1000); }
void IndexTestCase::testTextIndex() { DocumentSchema schema; schema.addUnIndexedField("PATH"); schema.addTextField("CONTENT"); buildIndex(schema, "file1.txt, hello world."); tstring str = getTestPath(); Index index; index.open(str, Index::READ, NULL); IndexReaderPtr pReader = index.acquireReader(); CPPUNIT_ASSERT(pReader != NULL); TermReaderPtr pTermReader = pReader->termReader(); CPPUNIT_ASSERT(pTermReader); TermIteratorPtr pTermIterator = pTermReader->termIterator("CONTENT"); CPPUNIT_ASSERT(pTermIterator != NULL); while (pTermIterator->hasNext()) { TermIterator::TermEntry entry = pTermIterator->next(); const TermMeta& termMeta = entry.postingIterator->getTermMeta(); CPPUNIT_ASSERT_EQUAL((df_t)1, termMeta.getDocFreq()); CPPUNIT_ASSERT_EQUAL((ctf_t)1, termMeta.getCTF()); } Term term("CONTENT", "hello"); TermPostingIteratorPtr pPost = pTermReader->seek(&term); CPPUNIT_ASSERT(pPost); docid_t docId = pPost->skipTo(0); CPPUNIT_ASSERT_EQUAL((docid_t)0, docId); docId = pPost->skipTo(++docId); CPPUNIT_ASSERT_EQUAL((docid_t)INVALID_DOCID, docId); StoredFieldsReaderPtr pDocReader = pReader->createStoredFieldsReader(); CPPUNIT_ASSERT(pDocReader); FieldSelector selector(pReader->getDocSchema(), true, false); ResultDoc resultDoc(0); bool ret = pDocReader->getDocument(selector, resultDoc); CPPUNIT_ASSERT(ret); CPPUNIT_ASSERT(resultDoc.size() > 0); }