FirteX-高性能全文索引和检索平台

API Documentation


首页 | 名字空间列表 | 类继承关系 | 组合类型列表 | $(BL\录(B | 文件列表 | 名字空间成员 | 组合类型成员 | 文件成员

IndexReader.h

浏览该文件的文档。
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