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
00165 virtual void close();
00166
00168 virtual std::string get_description() const;
00169
00180 PostingIterator postlist_begin(const std::string &tname) const;
00181
00184 PostingIterator postlist_end(const std::string &) const {
00185 return PostingIterator();
00186 }
00187
00193 TermIterator termlist_begin(Xapian::docid did) const;
00194
00197 TermIterator termlist_end(Xapian::docid) const {
00198 return TermIterator();
00199 }
00200
00202 bool has_positions() const;
00203
00207 PositionIterator positionlist_begin(Xapian::docid did, const std::string &tname) const;
00208
00211 PositionIterator positionlist_end(Xapian::docid, const std::string &) const {
00212 return PositionIterator();
00213 }
00214
00217 TermIterator allterms_begin() const;
00218
00221 TermIterator allterms_end() const {
00222 return TermIterator();
00223 }
00224
00236 TermIterator allterms_begin(const std::string & prefix) const;
00237
00240 TermIterator allterms_end(const std::string &) const {
00241 return TermIterator();
00242 }
00243
00245 Xapian::doccount get_doccount() const;
00246
00248 Xapian::docid get_lastdocid() const;
00249
00251 Xapian::doclength get_avlength() const;
00252
00254 Xapian::doccount get_termfreq(const std::string & tname) const;
00255
00264 bool term_exists(const std::string & tname) const;
00265
00275 Xapian::termcount get_collection_freq(const std::string & tname) const;
00276
00287 Xapian::doccount get_value_freq(Xapian::valueno slot) const;
00288
00299 std::string get_value_lower_bound(Xapian::valueno slot) const;
00300
00311 std::string get_value_upper_bound(Xapian::valueno slot) const;
00312
00317 Xapian::termcount get_doclength_lower_bound() const;
00318
00320 Xapian::termcount get_doclength_upper_bound() const;
00321
00323 Xapian::termcount get_wdf_upper_bound(const std::string & term) const;
00324
00326 ValueIterator valuestream_begin(Xapian::valueno slot) const;
00327
00329 ValueIteratorEnd_ valuestream_end(Xapian::valueno) const {
00330 return ValueIteratorEnd_();
00331 }
00332
00334 Xapian::termcount get_doclength(Xapian::docid did) const;
00335
00340 void keep_alive();
00341
00357 Xapian::Document get_document(Xapian::docid did) const;
00358
00367 std::string get_spelling_suggestion(const std::string &word,
00368 unsigned max_edit_distance = 2) const;
00369
00377 Xapian::TermIterator spellings_begin() const;
00378
00380 Xapian::TermIterator spellings_end() const {
00381 return Xapian::TermIterator();
00382 }
00383
00388 Xapian::TermIterator synonyms_begin(const std::string &term) const;
00389
00391 Xapian::TermIterator synonyms_end(const std::string &) const {
00392 return Xapian::TermIterator();
00393 }
00394
00400 Xapian::TermIterator synonym_keys_begin(const std::string &prefix = std::string()) const;
00401
00403 Xapian::TermIterator synonym_keys_end(const std::string & = std::string()) const {
00404 return Xapian::TermIterator();
00405 }
00406
00431 std::string get_metadata(const std::string & key) const;
00432
00451 Xapian::TermIterator metadata_keys_begin(const std::string &prefix = std::string()) const;
00452
00454 Xapian::TermIterator metadata_keys_end(const std::string & = std::string()) const {
00455 return Xapian::TermIterator();
00456 }
00457
00472 std::string get_uuid() const;
00473 };
00474
00477 class XAPIAN_VISIBILITY_DEFAULT WritableDatabase : public Database {
00478 public:
00491 virtual ~WritableDatabase();
00492
00495 WritableDatabase();
00496
00519 WritableDatabase(const std::string &path, int action);
00520
00523 explicit WritableDatabase(Database::Internal *internal);
00524
00530 WritableDatabase(const WritableDatabase &other);
00531
00541 void operator=(const WritableDatabase &other);
00542
00581 void commit();
00582
00588 void flush() { commit(); }
00589
00636 void begin_transaction(bool flushed=true);
00637
00663 void commit_transaction();
00664
00683 void cancel_transaction();
00684
00713 Xapian::docid add_document(const Xapian::Document & document);
00714
00736 void delete_document(Xapian::docid did);
00737
00757 void delete_document(const std::string & unique_term);
00758
00790 void replace_document(Xapian::docid did,
00791 const Xapian::Document & document);
00792
00826 Xapian::docid replace_document(const std::string & unique_term,
00827 const Xapian::Document & document);
00828
00836 void add_spelling(const std::string & word,
00837 Xapian::termcount freqinc = 1) const;
00838
00847 void remove_spelling(const std::string & word,
00848 Xapian::termcount freqdec = 1) const;
00849
00856 void add_synonym(const std::string & term,
00857 const std::string & synonym) const;
00858
00865 void remove_synonym(const std::string & term,
00866 const std::string & synonym) const;
00867
00873 void clear_synonyms(const std::string & term) const;
00874
00919 void set_metadata(const std::string & key, const std::string & value);
00920
00922 std::string get_description() const;
00923 };
00924
00926 const int DB_CREATE_OR_OPEN = 1;
00928 const int DB_CREATE = 2;
00930 const int DB_CREATE_OR_OVERWRITE = 3;
00932 const int DB_OPEN = 4;
00933
00934 }
00935
00936 #endif