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

API Documentation


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

Document.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      : 2005/11/20
00013 //
00014 
00015 #ifndef __DOCUMENT_H
00016 #define __DOCUMENT_H
00017 
00018 #if _MSC_VER > 1000
00019 #pragma once
00020 #endif // _MSC_VER > 1000
00021 
00022 #include "../utility/StdHeader.h"
00023 #include "Field.h"
00024 #include "DocumentSchema.h"
00025 #include "../utility/Config.h"
00026 #include <assert.h>
00027 #include <string>
00028 #include <map>
00029 #include <vector>
00030 
00031 using namespace std;
00032 
00033 namespace firtex
00034 {
00035         namespace document
00036         {               
00037                 class CDocument
00038                 {
00039                 public:
00040                         CDocument();
00041                         ~CDocument();
00042                 public:
00046                         void    docID(docid_t did){m_docid = did;}
00047                         docid_t docID(){return m_docid;}
00048 
00053                         float   getBoost(){return m_fBoost;}
00054                         void    setBoost(float fBoost){m_fBoost = fBoost;}
00055                 public:
00060                         void    setSchema(const CDocumentSchema& schema);
00061 
00066                         void    setSchema(CDocumentSchema* schema);
00067 
00071                         CDocumentSchema*        getSchema(){return m_pDocSchema;}
00072 
00078                         void    appendSchema(const CDocumentSchema& schema,bool bTail = true);
00079 
00084                         int             addField(CField* pField);               
00085                         
00093                         inline void addField(fieldid_t id,const char* value);
00094                         inline void addField(fieldid_t id,const wchar_t* value);
00095                         inline void addField(fieldid_t id,char* value,size_t len,bool bNoCopy);
00096                         inline void addField(fieldid_t id,wchar_t* value,size_t len,bool bNoCopy);
00097                         inline void addField(fieldid_t id,const str_t& value,bool bNoCopy);
00098                         inline void addField(fieldid_t id,const wstr_t& value,bool bNoCopy);
00099                         inline void addField(fieldid_t id,CReader* reader,bool bDelete);
00100                         inline void addField(fieldid_t id,const CNumber& number);
00101                         inline void addField(fieldid_t id,const numbervar& number);
00102                         inline void addField(fieldid_t id,const datarecord& datarec,bool bNoCopy);
00103 
00108                         void    removeField(const tchar* name);
00109 
00114                         void    removeField(CField* pField);
00115                 public:
00116                         CField* operator[](int order);
00117                         CField* operator[](const tchar* name);          
00118 
00124                         CField* getField(const tchar* name);
00125                         CField* getField(int order);
00126 
00131                         bool    isModified(){return m_bModified;}
00132                         
00137                         void    setModify(bool bMod = true){m_bModified = bMod;}
00138 
00142                         void    clear();
00143 
00147                         void    startIterator(){m_fieldIterator = m_fields.begin();}
00148                         bool    hasNext(){return (m_fieldIterator != m_fields.end());}
00149                         CField* next(){return *m_fieldIterator++;}
00150                 protected:
00151                         void    applySchema();
00152                 private:                        
00153                         docid_t                         m_docid;
00154                         vector<CField*>         m_fields;
00155                         CField**                        m_ppFields;             //用于根据schemaid快速定位
00156                         int                                     m_numSchemas;   //m_ppFields数组大小
00157                         CDocumentSchema*        m_pDocSchema;   //文档的schema信息
00158                         bool                            m_bSchemaOwner;
00159 
00160                         float   m_fBoost;
00161                         bool    m_bModified;
00162                         vector<CField*>::iterator m_fieldIterator;
00163                 };
00165                 //Inline functions
00166                 inline int CDocument::addField(CField* pField)
00167                 {                       
00168                         m_fields.push_back(pField);                     
00169                         setModify();
00170                         return (int)(m_fields.size()-1);
00171                 }
00172                 inline CField* CDocument::getField(int order)
00173                 {
00174                         if (order < 0 || order >=(int) m_fields.size())
00175                                 return NULL;
00176                         return m_fields[order];
00177                 }
00178                 inline CField* CDocument::operator[](int order)
00179                 {
00180                         return getField(order);
00181                 }
00182                 inline CField* CDocument::operator[](const tchar* name)
00183                 {
00184                         return getField(name);
00185                 }               
00186         
00187                 inline void CDocument::addField(fieldid_t id,const char* value)
00188                 {
00189                         assert(id >=0 && id < m_numSchemas);
00190                         m_ppFields[id]->textValue((char*)value,strlen(value),false);
00191                 }
00192                 inline void CDocument::addField(fieldid_t id,const wchar_t* value)
00193                 {
00194                         assert(id >=0 && id < m_numSchemas);
00195                         m_ppFields[id]->textValue((wchar_t*)value,wcslen(value),false);
00196                 }
00197                 inline void CDocument::addField(fieldid_t id,char* value,size_t len,bool bNoCopy)
00198                 {
00199                         assert(id >=0 && id < m_numSchemas);
00200                         m_ppFields[id]->textValue(value,len,bNoCopy);
00201                 }
00202                 inline void CDocument::addField(fieldid_t id,wchar_t* value,size_t len,bool bNoCopy)
00203                 {
00204                         assert(id >=0 && id < m_numSchemas);
00205                         m_ppFields[id]->textValue(value,len,bNoCopy);
00206                 }
00207 
00208                 inline void CDocument::addField(fieldid_t id,const str_t& value,bool bNoCopy)
00209                 {
00210                         assert(id >=0 && id < m_numSchemas);
00211                         m_ppFields[id]->textValue(value,bNoCopy);
00212 
00213                 }
00214                 inline void CDocument::addField(fieldid_t id,const wstr_t& value,bool bNoCopy)
00215                 {
00216                         assert(id >=0 && id < m_numSchemas);
00217                         m_ppFields[id]->textValue(value,bNoCopy);
00218                 }
00219                 inline void CDocument::addField(fieldid_t id,CReader* reader,bool bDelete)
00220                 {
00221                         assert(id >=0 && id < m_numSchemas);
00222                         m_ppFields[id]->readerValue(reader,bDelete);
00223                 }
00224                 inline void CDocument::addField(fieldid_t id,const CNumber& number)
00225                 {
00226                         assert(id >=0 && id < m_numSchemas);
00227                         if(m_ppFields[id]->isAnalyzed())
00228                         {
00229                                 FIRTEX_CLOG(level::warn) << "CDocument::addField(fieldid_t id,const CNumber& number):Number value can't analyze,discard it." <<endl;
00230                                 return;
00231                         }       
00232                         m_ppFields[id]->numberValue(number);
00233                 }
00234                 inline void CDocument::addField(fieldid_t id,const numbervar& number)
00235                 {
00236                         assert(id >=0 && id < m_numSchemas);
00237                         if(m_ppFields[id]->isAnalyzed())
00238                         {
00239                                 FIRTEX_CLOG(level::warn) << "CDocument::addField(fieldid_t id,const numbervar& number):Number value can't analyze,discard it." <<endl;
00240                                 return;
00241                         }       
00242                         m_ppFields[id]->numberValue(number);
00243                 }
00244                 inline void CDocument::addField(fieldid_t id,const datarecord& datarec,bool bNoCopy)
00245                 {
00246                         assert(id >=0 && id < m_numSchemas);
00247                         if(m_ppFields[id]->isAnalyzed())
00248                         {
00249                                 FIRTEX_CLOG(level::warn) << "CDocument::addField(fieldid_t id,const datarecord& datarec,bool bNoCopy):Binary value can't analyze,discard it." <<endl;
00250                                 return;
00251                         }       
00252                         m_ppFields[id]->binaryValue(datarec,bNoCopy);
00253                 }
00254         }
00255 }
00256 
00257 #endif

http://www.firtex.org http://www.sourceforge.net/projects/firtex