00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef XAPIAN_INCLUDED_DATABASE_H
00026 #define XAPIAN_INCLUDED_DATABASE_H
00027
00028 #include <string>
00029 #include <vector>
00030
00031 #include <xapian/base.h>
00032 #include <xapian/document.h>
00033 #include <xapian/types.h>
00034 #include <xapian/positioniterator.h>
00035 #include <xapian/postingiterator.h>
00036 #include <xapian/termiterator.h>
00037 #include <xapian/valueiterator.h>
00038 #include <xapian/visibility.h>
00039
00041 namespace Xapian {
00042
00057 class XAPIAN_VISIBILITY_DEFAULT Database {
00058 public:
00059 class Internal;
00061 std::vector<Xapian::Internal::RefCntPtr<Internal> > internal;
00062
00078 Document::Internal * get_document_lazily(Xapian::docid did) const;
00079
00085 void add_database(const Database & database);
00086
00089 Database();
00090
00096 explicit Database(const std::string &path);
00097
00100 explicit Database(Internal *internal);
00101
00107 virtual ~Database();
00108
00112 Database(const Database &other);
00113
00117 void operator=(const Database &other);
00118
00128 void reopen();
00129
00157 virtual void close();
00158
00160 virtual std::string get_description() const;
00161
00170 PostingIterator postlist_begin(const std::string &tname) const;
00171
00174 PostingIterator postlist_end(const std::string &) const {
00175 return PostingIterator(NULL);
00176 }
00177
00181 TermIterator termlist_begin(Xapian::docid did) const;
00182
00185 TermIterator termlist_end(Xapian::docid) const {
00186 return TermIterator(NULL);
00187 }
00188
00190 bool has_positions() const;
00191
00195 PositionIterator positionlist_begin(Xapian::docid did, const std::string &tname) const;
00196
00199 PositionIterator positionlist_end(Xapian::docid, const std::string &) const {
00200 return PositionIterator(NULL);
00201 }
00202
00205 TermIterator allterms_begin() const;
00206
00209 TermIterator allterms_end() const {
00210 return TermIterator(NULL);
00211 }
00212
00224 TermIterator allterms_begin(const std::string & prefix) const;
00225
00228 TermIterator allterms_end(const std::string &) const {
00229 return TermIterator(NULL);
00230 }
00231
00233 Xapian::doccount get_doccount() const;
00234
00236 Xapian::docid get_lastdocid() const;
00237
00239 Xapian::doclength get_avlength() const;
00240
00242 Xapian::doccount get_termfreq(const std::string & tname) const;
00243
00250 bool term_exists(const std::string & tname) const;
00251
00261 Xapian::termcount get_collection_freq(const std::string & tname) const;
00262
00273 Xapian::doccount get_value_freq(Xapian::valueno valno) const;
00274
00285 std::string get_value_lower_bound(Xapian::valueno valno) const;
00286
00297 std::string get_value_upper_bound(Xapian::valueno valno) const;
00298
00303 Xapian::termcount get_doclength_lower_bound() const;
00304
00306 Xapian::termcount get_doclength_upper_bound() const;
00307
00309 Xapian::termcount get_wdf_upper_bound(const std::string & term) const;
00310
00312 ValueIterator valuestream_begin(Xapian::valueno slot) const;
00313
00315 ValueIteratorEnd_ valuestream_end(Xapian::valueno) const {
00316 return ValueIteratorEnd_();
00317 }
00318
00320 Xapian::termcount get_doclength(Xapian::docid did) const;
00321
00326 void keep_alive();
00327
00340 Xapian::Document get_document(Xapian::docid did) const;
00341
00350 std::string get_spelling_suggestion(const std::string &word,
00351 unsigned max_edit_distance = 2) const;
00352
00360 Xapian::TermIterator spellings_begin() const;
00361
00363 Xapian::TermIterator spellings_end() const {
00364 return Xapian::TermIterator(NULL);
00365 }
00366
00371 Xapian::TermIterator synonyms_begin(const std::string &term) const;
00372
00374 Xapian::TermIterator synonyms_end(const std::string &) const {
00375 return Xapian::TermIterator(NULL);
00376 }
00377
00383 Xapian::TermIterator synonym_keys_begin(const std::string &prefix = std::string()) const;
00384
00386 Xapian::TermIterator synonym_keys_end(const std::string & = std::string()) const {
00387 return Xapian::TermIterator(NULL);
00388 }
00389
00414 std::string get_metadata(const std::string & key) const;
00415
00434 Xapian::TermIterator metadata_keys_begin(const std::string &prefix = std::string()) const;
00435
00437 Xapian::TermIterator metadata_keys_end(const std::string & = std::string()) const {
00438 return Xapian::TermIterator(NULL);
00439 }
00440
00455 std::string get_uuid() const;
00456 };
00457
00460 class XAPIAN_VISIBILITY_DEFAULT WritableDatabase : public Database {
00461 public:
00468 virtual ~WritableDatabase();
00469
00472 WritableDatabase();
00473
00496 WritableDatabase(const std::string &path, int action);
00497
00500 explicit WritableDatabase(Database::Internal *internal);
00501
00505 WritableDatabase(const WritableDatabase &other);
00506
00514 void operator=(const WritableDatabase &other);
00515
00551 void commit();
00552
00558 void flush() { commit(); }
00559
00598 void begin_transaction(bool flushed=true);
00599
00625 void commit_transaction();
00626
00645 void cancel_transaction();
00646
00675 Xapian::docid add_document(const Xapian::Document & document);
00676
00698 void delete_document(Xapian::docid did);
00699
00719 void delete_document(const std::string & unique_term);
00720
00752 void replace_document(Xapian::docid did,
00753 const Xapian::Document & document);
00754
00786 Xapian::docid replace_document(const std::string & unique_term,
00787 const Xapian::Document & document);
00788
00796 void add_spelling(const std::string & word,
00797 Xapian::termcount freqinc = 1) const;
00798
00807 void remove_spelling(const std::string & word,
00808 Xapian::termcount freqdec = 1) const;
00809
00815 void add_synonym(const std::string & term,
00816 const std::string & synonym) const;
00817
00822 void remove_synonym(const std::string & term,
00823 const std::string & synonym) const;
00824
00829 void clear_synonyms(const std::string & term) const;
00830
00875 void set_metadata(const std::string & key, const std::string & value);
00876
00878 std::string get_description() const;
00879 };
00880
00882 const int DB_CREATE_OR_OPEN = 1;
00884 const int DB_CREATE = 2;
00886 const int DB_CREATE_OR_OVERWRITE = 3;
00888 const int DB_OPEN = 4;
00889
00890
00891
00892 }
00893
00894 #endif