diff --git a/cpp/src/db/DB.h b/cpp/src/db/DB.h index f52042b22fa11838587136d0be352fae9a9eae53..da3c50a8b9866de403b30482ecd64ea10a0de562 100644 --- a/cpp/src/db/DB.h +++ b/cpp/src/db/DB.h @@ -30,6 +30,9 @@ public: virtual Status search(const std::string& group_id, size_t k, size_t nq, const float* vectors, QueryResults& results) = 0; + virtual Status search(const std::string& group_id, size_t k, size_t nq, + const float* vectors, const meta::DatesT& dates, QueryResults& results) = 0; + virtual Status drop_all() = 0; virtual Status count(const std::string& group_id, long& result) = 0; diff --git a/cpp/src/db/DBImpl.cpp b/cpp/src/db/DBImpl.cpp index ff65f4e91eba68d390136ac9d3e045aec57763c0..0720e6a99f260b78e0da26a65d2c8c2689173ea5 100644 --- a/cpp/src/db/DBImpl.cpp +++ b/cpp/src/db/DBImpl.cpp @@ -57,14 +57,21 @@ Status DBImpl::add_vectors(const std::string& group_id_, } } -// TODO(XUPENG): add search range based on time Status DBImpl::search(const std::string &group_id, size_t k, size_t nq, const float *vectors, QueryResults &results) { + meta::DatesT dates = {meta::Meta::GetDate()}; + return search(group_id, k, nq, vectors, dates, results); +} + +Status DBImpl::search(const std::string& group_id, size_t k, size_t nq, + const float* vectors, const meta::DatesT& dates, QueryResults& results) { + meta::DatePartionedGroupFilesSchema files; - std::vector partition; - auto status = _pMeta->files_to_search(group_id, partition, files); + auto status = _pMeta->files_to_search(group_id, dates, files); if (!status.ok()) { return status; } + LOG(DEBUG) << "Search DateT Size=" << files.size(); + meta::GroupFilesSchema index_files; meta::GroupFilesSchema raw_files; for (auto &day_files : files) { diff --git a/cpp/src/db/DBImpl.h b/cpp/src/db/DBImpl.h index e7d0d48056bbbb5d3e4bbea9a0cefb1ab70ef50f..eda179a9b25d7925846ab580e786fe60ddff0121 100644 --- a/cpp/src/db/DBImpl.h +++ b/cpp/src/db/DBImpl.h @@ -36,6 +36,9 @@ public: virtual Status search(const std::string& group_id, size_t k, size_t nq, const float* vectors, QueryResults& results) override; + virtual Status search(const std::string& group_id, size_t k, size_t nq, + const float* vectors, const meta::DatesT& dates, QueryResults& results) override; + virtual Status drop_all() override; virtual Status count(const std::string& group_id, long& result) override; diff --git a/cpp/src/db/DBMetaImpl.cpp b/cpp/src/db/DBMetaImpl.cpp index 38295974eae71dd5a3b2b3e8c523f3b03902248f..ba8373ab5c2f0806a5e04c36b49696b2a411fdd1 100644 --- a/cpp/src/db/DBMetaImpl.cpp +++ b/cpp/src/db/DBMetaImpl.cpp @@ -253,10 +253,12 @@ Status DBMetaImpl::files_to_index(GroupFilesSchema& files) { } Status DBMetaImpl::files_to_search(const std::string &group_id, - std::vector partition, + const DatesT& partition, DatePartionedGroupFilesSchema &files) { - // TODO: support data partition files.clear(); + DatesT today = {Meta::GetDate()}; + const DatesT& dates = (partition.empty() == true) ? today : partition; + try { auto selected = ConnectorPtr->select(columns(&GroupFileSchema::id, &GroupFileSchema::group_id, @@ -265,6 +267,7 @@ Status DBMetaImpl::files_to_search(const std::string &group_id, &GroupFileSchema::rows, &GroupFileSchema::date), where(c(&GroupFileSchema::group_id) == group_id and + in(&GroupFileSchema::date, dates) and (c(&GroupFileSchema::file_type) == (int) GroupFileSchema::RAW or c(&GroupFileSchema::file_type) == (int) GroupFileSchema::INDEX))); diff --git a/cpp/src/db/DBMetaImpl.h b/cpp/src/db/DBMetaImpl.h index 303c0f84b4293ef569ad4c91edec71fcf576ac8e..5fbf04c1b6fcbd9aea9833a9670b75806db03c1e 100644 --- a/cpp/src/db/DBMetaImpl.h +++ b/cpp/src/db/DBMetaImpl.h @@ -39,7 +39,7 @@ public: DatePartionedGroupFilesSchema& files) override; virtual Status files_to_search(const std::string& group_id, - std::vector partition, + const DatesT& partition, DatePartionedGroupFilesSchema& files) override; virtual Status files_to_index(GroupFilesSchema&) override; diff --git a/cpp/src/db/Meta.h b/cpp/src/db/Meta.h index e79e4725180e6b80b03de5caf09b418e8646edca..bf9d55847c85cd31c0bc2b537c09a86d2f951eaf 100644 --- a/cpp/src/db/Meta.h +++ b/cpp/src/db/Meta.h @@ -15,6 +15,7 @@ namespace meta { typedef int DateT; const DateT EmptyDate = -1; +typedef std::vector DatesT; struct GroupSchema { size_t id; @@ -72,7 +73,7 @@ public: virtual Status update_files(GroupFilesSchema& files) = 0; virtual Status files_to_search(const std::string& group_id, - std::vector partition, + const DatesT& partition, DatePartionedGroupFilesSchema& files) = 0; virtual Status files_to_merge(const std::string& group_id,