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

API Documentation


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

QueryParser.h

浏览该文件的文档。
00001 #ifndef __QUERYPARSER_H
00002 #define __QUERYPARSER_H
00003 #include <string>
00004 #include <vector>
00005 #include "../analyzer/Analyzer.h"
00006 #include "QueryParserConstants.h"
00007 #include "../utility/StringReader.h"
00008 #include "Query.h"
00009 
00010 using namespace firtex::analyzer;
00011 using namespace firtex::utility;
00012 using namespace std;
00013 
00014 
00015 namespace firtex
00016 {
00017         namespace search
00018         {
00019 
00020 #define CONJ_NONE   0
00021 #define CONJ_AND    1
00022 #define CONJ_OR     2
00023 
00024 #define MOD_NONE    0
00025 #define MOD_NOT     10
00026 #define MOD_REQ     11
00027                 
00028                 class CTokenList;
00029                 class CBooleanClause;
00030                 class CQueryToken;
00031                 class CQueryParser
00032                 {
00033                 public:
00039                         CQueryParser(const tchar* field,CAnalyzer* pAnalyzer,bool bDeleteAnalyzer);
00040 
00047                         CQueryParser(const tchar** fields,CAnalyzer** pAnalyzers,int32_t numFields);
00048 
00049                         virtual ~CQueryParser(void);
00050                 public:
00059                         static CQuery*          parse(const tchar* query,const tchar* field,CAnalyzer* pAnalyzer,bool bDeleteAnalyzer);
00060 
00067                         CQuery*                         parse(const tchar* query);
00068 
00075                         void                            attachAnalyzer(const tchar* field,CAnalyzer* pAnalyzer);
00076 
00083                         CAnalyzer*                      detachAnalyzer(const tchar* field);
00084                 protected:
00085                         CQuery*                         parse(CStringReader* reader);
00086 
00093                         CQuery*                         MatchQuery(const tstring& field);
00094 
00095                         CAnalyzer*                      getAnalyzer(const tstring& field);
00096                 private:
00101                         int32_t matchConjunction();
00102 
00107                         int32_t matchModifier();
00108 
00109 
00114                         CQuery* matchQuery(const tstring& field);
00115 
00120                         CQuery* matchClause(const tstring& field);
00121 
00129                         CQuery* matchTerm(const tstring& field);
00130 
00135                         CQueryToken* matchQueryToken(QueryTokenTypes expectedType);
00136 
00140                         void extractAndDeleteToken(void);
00141 
00142                         void addClause(vector<CBooleanClause*>* clauses, int32_t conj, int32_t mods, CQuery* q);
00143 
00144                         string  discardEscapeChar(const tstring& token);
00145                         CQuery* getFieldQuery(const tstring& field, const tstring& queryText);
00146                         CQuery* getRangeQuery(const tstring& field, const tstring& queryText, bool inclusive);
00147 
00148                 private:
00149                         struct AnalyzerRef
00150                         {
00151                                 AnalyzerRef(int32_t _ref,bool _del):ref(_ref),del(_del){}
00152                                 AnalyzerRef(const AnalyzerRef& clone):ref(clone.ref),del(clone.del){}
00153                                 int32_t         ref;            //引用计数
00154                                 bool            del;            //是否删除
00155                         };
00156                         map<tstring,CAnalyzer*> m_analyzers;
00157                         map<CAnalyzer*,AnalyzerRef>     m_distinctAnalyzers;
00158 
00159                         CFXString               m_defaultField; //当查询表达式没有提供字段名时作为默认字段名
00160                         CAnalyzer*              m_defaultAnalyzer;
00161 
00162                         CTokenList*             m_tokens;
00163 
00164                         bool                    m_lowercaseWildcardTerms;
00165                 };
00166         }
00167 }
00168 
00169 #endif

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