lux/index/inverted_index.h

00001 #ifndef LUX_INDEX_INVERTEDINDEX_H
00002 #define LUX_INDEX_INVERTEDINDEX_H
00003 
00004 #include "lux/lux.h"
00005 #include "lux/scoped_ptr.h"
00006 #include "search_index.h"
00007 #include "inverted_index_core.h"
00008 #include "document/document_definition.pb.h"
00009 #include "lexer/lexer.h"
00010 #include <cstring>
00011 
00012 namespace Lux {
00013 
00014   class Query;
00015   class TermQuery;
00016   class PhraseQuery;
00017   class BooleanQuery;
00018 
00022   class InvertedIndex : public SearchIndex {
00023 
00024   public:
00025     InvertedIndex(Config::Document &doc_config);
00026     virtual ~InvertedIndex();
00027     virtual bool open(std::string storage_dir, db_flags_t open_params);
00028     virtual bool close(void);
00029     virtual bool add(const Document *doc);
00030     virtual bool add(const Document &doc);
00031     virtual void flush(void);
00032     virtual uint32_t get_buffer_size(void);
00033     virtual void print_buffer(void);
00034     virtual void set_sys_cond(sys_cond_t sys_cond);
00035     virtual IndexResultSet search(Query *query);
00036     virtual IndexResultSet search_term(TermQuery *qterm);
00037     virtual IndexResultSet search_phrase(PhraseQuery *qphrase);
00038     virtual IndexResultSet search_boolean(BooleanQuery *qboolean);
00039 
00040   private:
00041     scoped_ptr<LuxLexer> lexer_;
00042     IndexEngineSet index_engine_set_;
00043     scoped_ptr<IndexBufferSet> index_buffer_set_;
00044     scoped_ptr<IndexDataSet> index_data_set_;
00045     Config::Document doc_config_;
00046     sys_cond_t sys_cond_;
00047 
00048     LuxDataUnit *get_term_unit_(TermQuery *qterm);
00049     Posting get_term_pos_(TermQuery *qterm);
00050     Posting get_phrase_pos_(PhraseQuery *qphrase);
00051     IndexResultSet pos_to_rs_(Posting &p);
00052     pos_list_t _intersect(LuxDataUnit *u1, LuxDataUnit *u2, int diff);
00053     pos_list_t _intersect(LuxDataUnit *u, pos_list_t &p, int diff);
00054     pos_list_t _intersect(pos_list_t &p, LuxDataUnit *u, int diff);
00055 
00056   };
00057 }
00058 
00059 #endif

Generated on Fri Feb 5 15:50:30 2010 for Lux by  doxygen 1.4.7