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
00040 namespace Xapian {
00041
00056 class XAPIAN_VISIBILITY_DEFAULT Database {
00057 public:
00058 class Internal;
00060 std::vector<Xapian::Internal::RefCntPtr<Internal> > internal;
00061
00077 Document::Internal * get_document_lazily(Xapian::docid did) const;
00078
00084 void add_database(const Database & database);
00085
00088 Database();
00089
00095 explicit Database(const std::string &path);
00096
00099 explicit Database(Internal *internal);
00100
00106 virtual ~Database();
00107
00113 Database(const Database &other);
00114
00120 void operator=(const Database &other);
00121
00131 void reopen();
00132
00167 virtual void close();
00168
00170 virtual std::string get_description() const;
00171
00182 PostingIterator postlist_begin(const std::string &tname) const;
00183
00186 PostingIterator postlist_end(const std::string &) const {
00187 return PostingIterator();
00188 }
00189
00195 TermIterator termlist_begin(Xapian::docid did) const;
00196
00199 TermIterator termlist_end(Xapian::docid) const {
00200 return TermIterator();
00201 }
00202
00204 bool has_positions() const;
00205
00209 PositionIterator positionlist_begin(Xapian::docid did, const std::string &tname) const;
00210
00213 PositionIterator positionlist_end(Xapian::docid, const std::string &) const {
00214 return PositionIterator();
00215 }
00216
00219 TermIterator allterms_begin() const;
00220
00223 TermIterator allterms_end() const {
00224 return TermIterator();
00225 }
00226
00238 TermIterator allterms_begin(const std::string & prefix) const;
00239
00242 TermIterator allterms_end(const std::string &) const {
00243 return TermIterator();
00244 }
00245
00247 Xapian::doccount get_doccount() const;
00248
00250 Xapian::docid get_lastdocid() const;
00251
00253 Xapian::doclength get_avlength() const;
00254
00256 Xapian::doccount get_termfreq(const std::string & tname) const;
00257
00266 bool term_exists(const std::string & tname) const;
00267
00277 Xapian::termcount get_collection_freq(const std::string & tname) const;
00278
00289 Xapian::doccount get_value_freq(Xapian::valueno slot) const;
00290
00301 std::string get_value_lower_bound(Xapian::valueno slot) const;
00302
00313 std::string get_value_upper_bound(Xapian::valueno slot) const;
00314
00319 Xapian::termcount get_doclength_lower_bound() const;
00320
00322 Xapian::termcount get_doclength_upper_bound() const;
00323
00325 Xapian::termcount get_wdf_upper_bound(const std::string & term) const;
00326
00328 ValueIterator valuestream_begin(Xapian::valueno slot) const;
00329
00331 ValueIteratorEnd_ valuestream_end(Xapian::valueno) const {
00332 return ValueIteratorEnd_();
00333 }
00334
00336 Xapian::termcount get_doclength(Xapian::docid did) const;
00337
00342 void keep_alive();
00343
00359 Xapian::Document get_document(Xapian::docid did) const;
00360
00369 std::string get_spelling_suggestion(const std::string &word,
00370 unsigned max_edit_distance = 2) const;
00371
00379 Xapian::TermIterator spellings_begin() const;
00380
00382 Xapian::TermIterator spellings_end() const {
00383 return Xapian::TermIterator();
00384 }
00385
00390 Xapian::TermIterator synonyms_begin(const std::string &term) const;
00391
00393 Xapian::TermIterator synonyms_end(const std::string &) const {
00394 return Xapian::TermIterator();
00395 }
00396
00402 Xapian::TermIterator synonym_keys_begin(const std::string &prefix = std::string()) const;
00403
00405 Xapian::TermIterator synonym_keys_end(const std::string & = std::string()) const {
00406 return Xapian::TermIterator();
00407 }
00408
00433 std::string get_metadata(const std::string & key) const;
00434
00453 Xapian::TermIterator metadata_keys_begin(const std::string &prefix = std::string()) const;
00454
00456 Xapian::TermIterator metadata_keys_end(const std::string & = std::string()) const {
00457 return Xapian::TermIterator();
00458 }
00459
00474 std::string get_uuid() const;
00475 };
00476
00479 class XAPIAN_VISIBILITY_DEFAULT WritableDatabase : public Database {
00480 public:
00493 virtual ~WritableDatabase();
00494
00497 WritableDatabase();
00498
00521 WritableDatabase(const std::string &path, int action);
00522
00525 explicit WritableDatabase(Database::Internal *internal);
00526
00532 WritableDatabase(const WritableDatabase &other);
00533
00543 void operator=(const WritableDatabase &other);
00544
00583 void commit();
00584
00590 void flush() { commit(); }
00591
00638 void begin_transaction(bool flushed=true);
00639
00665 void commit_transaction();
00666
00685 void cancel_transaction();
00686
00715 Xapian::docid add_document(const Xapian::Document & document);
00716
00738 void delete_document(Xapian::docid did);
00739
00759 void delete_document(const std::string & unique_term);
00760
00792 void replace_document(Xapian::docid did,
00793 const Xapian::Document & document);
00794
00828 Xapian::docid replace_document(const std::string & unique_term,
00829 const Xapian::Document & document);
00830
00838 void add_spelling(const std::string & word,
00839 Xapian::termcount freqinc = 1) const;
00840
00849 void remove_spelling(const std::string & word,
00850 Xapian::termcount freqdec = 1) const;
00851
00858 void add_synonym(const std::string & term,
00859 const std::string & synonym) const;
00860
00867 void remove_synonym(const std::string & term,
00868 const std::string & synonym) const;
00869
00875 void clear_synonyms(const std::string & term) const;
00876
00921 void set_metadata(const std::string & key, const std::string & value);
00922
00924 std::string get_description() const;
00925 };
00926
00928 const int DB_CREATE_OR_OPEN = 1;
00930 const int DB_CREATE = 2;
00932 const int DB_CREATE_OR_OVERWRITE = 3;
00934 const int DB_OPEN = 4;
00935
00936 }
00937
00938 #endif