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 : 2005/11/27 00013 // 00014 #ifndef _MULTIINDEXBARRELREADER_H 00015 #define _MULTIINDEXBARRELREADER_H 00016 00017 #include "IndexBarrelReader.h" 00018 #include "BarrelsInfo.h" 00019 #include "SingleIndexBarrelReader.h" 00020 #include "../store/Directory.h" 00021 using namespace firtex::store; 00022 00023 namespace firtex 00024 { 00025 namespace index 00026 { 00027 class CBarrelReaderEntry 00028 { 00029 public: 00030 CBarrelReaderEntry(CDirectory* pDirectory,CBarrelInfo* pBarrelInfo) 00031 { 00032 m_pBarrelInfo = pBarrelInfo; 00033 m_pBarrel = new CSingleIndexBarrelReader(pDirectory,pBarrelInfo->name().c_str()); 00034 } 00035 ~CBarrelReaderEntry() 00036 { 00037 delete m_pBarrel; 00038 m_pBarrel = NULL; 00039 m_pBarrelInfo = NULL; 00040 } 00041 public: 00042 CBarrelInfo* m_pBarrelInfo; 00043 CSingleIndexBarrelReader* m_pBarrel; 00044 00045 friend class CMultiIndexBarrelReader; 00046 }; 00047 00048 00049 class CMultiTermVectorReader; 00050 class CMultiIndexBarrelReader : public CIndexBarrelReader 00051 { 00052 public: 00053 CMultiIndexBarrelReader(CDirectory* pDirectory,CBarrelsInfo* pBarrelsInfo); 00054 virtual ~CMultiIndexBarrelReader(void); 00055 public: 00061 void open(const tchar* name); 00062 00066 document::CDocument* document(docid_t docID); 00067 00075 document::CField* field(docid_t docID,fieldid_t fid); 00076 00080 void undeleteAll(); 00081 00086 bool isDeleted(docid_t docID); 00087 00091 bool hasDeletions(); 00092 00096 count_t numDeletedDocs(); 00097 00102 void deleteDocument(docid_t docID); 00103 00108 CTermReader* termReader(); 00109 00115 CTermVectorReader* getTermVectorReader(); 00116 00121 CNormBytes* norms(const tchar* field); 00122 00127 CNormBytes* norms(fieldid_t fid); 00128 00132 uint64_t numTerms(); 00133 00137 CFieldsInfo& getFieldsInfo(); 00138 00142 void close(); 00143 public: 00147 void startIterator(){m_readersIterator = m_readers.begin();} 00152 bool hasNext(){return (m_readersIterator != m_readers.end());} 00153 CBarrelReaderEntry* nextEntry(); 00154 CIndexBarrelReader* nextReader(); 00155 CBarrelInfo* nextBarrel(); 00156 protected: 00157 void addReader(CBarrelInfo* pBarrelInfo); 00158 bool loadNorms(const tchar* field); 00159 bool loadNorms(fieldid_t fid); 00160 private: 00161 CBarrelsInfo* m_pBarrelsInfo; 00162 CTermReader* m_reader; 00163 CMultiTermVectorReader* m_pTermVectorReader; 00164 vector<CBarrelReaderEntry*> m_readers; 00165 vector<CBarrelReaderEntry*>::iterator m_readersIterator; 00166 00167 map<fieldid_t,CNormBytes*> m_normsByID; 00168 map<tstring,CNormBytes*> m_normsByName; 00169 }; 00171 //Inline Functions 00172 inline CBarrelReaderEntry* CMultiIndexBarrelReader::nextEntry() 00173 { 00174 return *m_readersIterator++; 00175 } 00176 inline CIndexBarrelReader* CMultiIndexBarrelReader::nextReader() 00177 { 00178 CIndexBarrelReader* pReader = (*m_readersIterator)->m_pBarrel; 00179 m_readersIterator++; 00180 return pReader; 00181 } 00182 inline CBarrelInfo* CMultiIndexBarrelReader::nextBarrel() 00183 { 00184 CBarrelInfo* pBarrelInfo = (*m_readersIterator)->m_pBarrelInfo; 00185 m_readersIterator++; 00186 return pBarrelInfo; 00187 } 00188 } 00189 } 00190 00191 #endif
http://www.firtex.org http://www.sourceforge.net/projects/firtex