diff --git a/cpp/src/db/FaissSerializer.cpp b/cpp/src/db/FaissSerializer.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6bc8b487a1aaf1aa5017de97d7545ea52cfb7eaa --- /dev/null +++ b/cpp/src/db/FaissSerializer.cpp @@ -0,0 +1,24 @@ +#include +#include + +#include "FaissSerializer.h" + +namespace zilliz { +namespace vecwise { +namespace engine { + +const std::string IndexType = "IDMap,Flat"; + +FaissSerializer::FaissSerializer(uint16_t dimension) + : pIndex_(faiss::index_factory(dimension, IndexType.c_str())) { +} + +bool FaissSerializer::AddWithIds(long n, const float *xdata, const long *xids) { + pIndex_->add_with_ids(n, xdata, xids); + return true; +} + + +} // namespace engine +} // namespace vecwise +} // namespace zilliz diff --git a/cpp/src/db/FaissSerializer.h b/cpp/src/db/FaissSerializer.h new file mode 100644 index 0000000000000000000000000000000000000000..fa13dad0a1e3a90091e287b6132c626bc3877e00 --- /dev/null +++ b/cpp/src/db/FaissSerializer.h @@ -0,0 +1,28 @@ +#pragma once + +#include +#include + +#include "Serializer.h" + +namespace faiss { + class Index; +} + +namespace zilliz { +namespace vecwise { +namespace engine { + +class FaissSerializer : public Serializer { +public: + FaissSerializer(uint16_t dimension); + virtual bool AddWithIds(long n, const float *xdata, const long *xids) override; + +protected: + std::shared_ptr pIndex_; +}; + + +} // namespace engine +} // namespace vecwise +} // namespace zilliz diff --git a/cpp/src/db/Serializer.cpp b/cpp/src/db/Serializer.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5a60defd509a3f2637c8536bf5cfacee9db9b4c4 --- /dev/null +++ b/cpp/src/db/Serializer.cpp @@ -0,0 +1,21 @@ +#include +#include "Serializer.h" + +namespace zilliz { +namespace vecwise { +namespace engine { + +bool Serializer::AddWithIds(const std::vector& vectors, const std::vector& vector_ids) { + long n1 = (long)vectors.size(); + long n2 = (long)vector_ids.size(); + if (n1 != n2) { + LOG(ERROR) << "vectors size is not equal to the size of vector_ids: " << n1 << "!=" << n2; + return false; + } + return AddWithIds(n1, vectors.data(), vector_ids.data()); +} + + +} // namespace engine +} // namespace vecwise +} // namespace zilliz diff --git a/cpp/src/db/Serializer.h b/cpp/src/db/Serializer.h new file mode 100644 index 0000000000000000000000000000000000000000..b7760fe9bc6277185caa911df5d3746e3be808e0 --- /dev/null +++ b/cpp/src/db/Serializer.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +namespace zilliz { +namespace vecwise { +namespace engine { + +class Serializer { +public: + + bool AddWithIds(const std::vector& vectors, + const std::vector& vector_ids); + + virtual bool AddWithIds(long n, const float *xdata, const long *xids) = 0; + + virtual ~Serializer() {} +}; + + +} // namespace engine +} // namespace vecwise +} // namespace zilliz