FirteX-高性能全文索引和检索平台API Documentation |
00001 // 00002 // Copyright(C) 2005--2006 Institute of Computing Tech, Chinese Academy of Sciences. 00003 // All rights reserved. 00004 // This file is part of FirteX (www.firtex.org) 00005 // 00006 // Use of the FirteX is subject to the terms of the software license set forth in 00007 // the LICENSE file included with this software, and also available at 00008 // http://www.firtex.org/license.html 00009 // 00010 // Author : 郭瑞杰(GuoRuijie) 00011 // Email : ruijieguo@software.ict.ac.cn 00012 // Created : 2006/4/27 00013 // 00014 00015 #ifndef _INDEXREADER_H 00016 #define _INDEXREADER_H 00017 00018 #include "../utility/StdHeader.h" 00019 #include "../utility/DateTime.h" 00020 #include "../store/Directory.h" 00021 #include "../document/Document.h" 00022 #include "FXInvIndex.h" 00023 #include "Index.h" 00024 00025 #include <string> 00026 using namespace firtex::document; 00027 using namespace firtex::store; 00028 using namespace std; 00029 00030 namespace firtex 00031 { 00032 namespace index 00033 { 00034 class CIndexReader 00035 { 00036 public: 00037 CIndexReader(); 00038 CIndexReader(const tchar* indexname); 00039 CIndexReader(CDirectory* pDirectory); 00040 CIndexReader(CIndex* pIndex); 00041 virtual ~CIndexReader(void); 00042 public: 00047 string getVersion(); 00048 00053 bool isDeleted(docid_t docID); 00054 00058 bool hasDeletions(); 00059 00063 count_t deletedNumDocs(); 00064 00069 virtual void open(const tchar* indexname); 00070 00075 virtual void open(CDirectory* pDirectory); 00076 00080 virtual void close(); 00081 00085 count_t numDocs(); 00086 00091 count_t maxDoc(); 00092 00098 document::CDocument* document(docid_t docID); 00099 00107 document::CField* field(docid_t docID,fieldid_t fid); 00108 00112 bool seek(CTerm* term); 00113 00119 CTermDocs* termDocs(); 00120 00126 CTermPositions* termPositions(); 00127 00132 freq_t docFreq(CTerm* term); 00133 00138 CTermInfo* termInfo(CTerm* term); 00139 00140 00144 CBarrelsInfo& getBarrelsInfo(); 00145 00151 CIndexBarrelReader* getBarrelReader(); 00152 00157 CFieldsInfo& getFieldsInfo(); 00158 00164 void attachIndex(CIndex* pIndex); 00165 00171 CIndex* detachIndex(); 00172 00178 CIndex* getIndex(){return m_pIndex;} 00179 00185 CTermReader* getTermReader(); 00186 00192 CTermVectorReader* getTermVectorReader(); 00193 00198 int64_t lastModified(); 00199 00204 void lastModified(CDateTime& dt); 00205 00210 static int64_t lastModified(CDirectory* pDirectory); 00211 00216 static void lastModified(CDirectory* pDirectory,CDateTime& dt); 00217 protected: 00218 CIndex* m_pIndex; 00219 CTermReader* m_pTermReader; 00220 bool m_bOwn; 00221 }; 00222 00224 //Inline functions 00225 inline string CIndexReader::getVersion() 00226 { 00227 if(!m_pIndex) 00228 FIRTEX_THROW2(VERSION_ERROR,"The index has not opened yet."); 00229 return m_pIndex->getVersion(); 00230 } 00231 inline count_t CIndexReader::numDocs() 00232 { 00233 if(!m_pIndex) 00234 FIRTEX_THROW2(VERSION_ERROR,"The index has not opened yet."); 00235 return m_pIndex->numDocs(); 00236 } 00237 00238 inline count_t CIndexReader::maxDoc() 00239 { 00240 if(!m_pIndex) 00241 FIRTEX_THROW2(VERSION_ERROR,"The index has not opened yet."); 00242 return m_pIndex->maxDoc(); 00243 } 00244 inline document::CDocument* CIndexReader::document(docid_t docID) 00245 { 00246 if(!m_pIndex) 00247 FIRTEX_THROW2(VERSION_ERROR,"The index has not opened yet."); 00248 return m_pIndex->document(docID); 00249 } 00250 inline document::CField* CIndexReader::field(docid_t docID,fieldid_t fid) 00251 { 00252 if(!m_pIndex) 00253 FIRTEX_THROW2(VERSION_ERROR,"The index has not opened yet."); 00254 return m_pIndex->field(docID,fid); 00255 } 00256 00257 inline bool CIndexReader::seek(CTerm* term) 00258 { 00259 if(m_pTermReader == NULL) 00260 m_pTermReader = m_pIndex->termReader(); 00261 return m_pTermReader->seek(term); 00262 } 00263 00264 inline CTermDocs* CIndexReader::termDocs() 00265 { 00266 if(m_pTermReader == NULL) 00267 m_pTermReader = m_pIndex->termReader(); 00268 return m_pTermReader->termDocs(); 00269 } 00270 00271 inline CTermPositions* CIndexReader::termPositions() 00272 { 00273 if(m_pTermReader == NULL) 00274 m_pTermReader = m_pIndex->termReader(); 00275 return m_pTermReader->termPositions(); 00276 } 00277 inline freq_t CIndexReader::docFreq(CTerm* term) 00278 { 00279 if(m_pTermReader == NULL) 00280 m_pTermReader = m_pIndex->termReader(); 00281 return m_pTermReader->docFreq(term); 00282 } 00283 inline CTermInfo* CIndexReader::termInfo(CTerm* term) 00284 { 00285 if(m_pTermReader == NULL) 00286 m_pTermReader = m_pIndex->termReader(); 00287 return m_pTermReader->termInfo(term); 00288 } 00289 inline CIndexBarrelReader* CIndexReader::getBarrelReader() 00290 { 00291 if(!m_pIndex) 00292 FIRTEX_THROW2(VERSION_ERROR,"The index has not opened yet."); 00293 CFXInvIndex* pIndex = static_cast<CFXInvIndex*>(m_pIndex); 00294 return pIndex->getBarrelReader(); 00295 } 00296 inline CFieldsInfo& CIndexReader::getFieldsInfo() 00297 { 00298 FIRTEX_ASSERT((m_pIndex!=NULL),_T("The index has not opened yet.")); 00299 CFXInvIndex* pIndex = static_cast<CFXInvIndex*>(m_pIndex); 00300 return pIndex->getFieldsInfo(); 00301 } 00302 inline CTermVectorReader* CIndexReader::getTermVectorReader() 00303 { 00304 FIRTEX_ASSERT((m_pIndex!=NULL),_T("The index has not opened yet.")); 00305 CFXInvIndex* pIndex = static_cast<CFXInvIndex*>(m_pIndex); 00306 return pIndex->getTermVectorReader(); 00307 } 00308 00309 inline void CIndexReader::lastModified(CDateTime& dt) 00310 { 00311 dt = lastModified(); 00312 } 00313 inline void CIndexReader::lastModified(CDirectory* pDirectory,CDateTime& dt) 00314 { 00315 dt = lastModified(pDirectory); 00316 } 00317 } 00318 } 00319 00320 #endif
http://www.firtex.org http://www.sourceforge.net/projects/firtex