diff --git a/internal/core/src/indexbuilder/IndexWrapper.cpp b/internal/core/src/indexbuilder/IndexWrapper.cpp index 12b6e90cedd728b1fe21198f5d95d2ee97d8db66..5c022fd9608eb1df3b4d0f2e0f4b49e82fad7feb 100644 --- a/internal/core/src/indexbuilder/IndexWrapper.cpp +++ b/internal/core/src/indexbuilder/IndexWrapper.cpp @@ -21,6 +21,7 @@ #include "indexbuilder/utils.h" #include "index/knowhere/knowhere/index/vector_index/ConfAdapterMgr.h" #include "index/knowhere/knowhere/common/Timer.h" +#include "index/knowhere/knowhere/common/Utils.h" namespace milvus { namespace indexbuilder { @@ -239,6 +240,10 @@ IndexWrapper::Serialize() { std::shared_ptr raw_data(new uint8_t[raw_data_.size()], std::default_delete()); memcpy(raw_data.get(), raw_data_.data(), raw_data_.size()); binarySet.Append(RAW_DATA, raw_data, raw_data_.size()); + auto slice_size = get_index_file_slice_size(); + // https://github.com/milvus-io/milvus/issues/6421 + // Disassemble will only divide the raw vectors, other keys was already divided + knowhere::Disassemble(slice_size * 1024 * 1024, binarySet); } namespace indexcgo = milvus::proto::indexcgo; @@ -317,6 +322,14 @@ IndexWrapper::get_index_mode() { return mode.has_value() ? mode_map[mode.value()] : knowhere::IndexMode::MODE_CPU; } +int64_t +IndexWrapper::get_index_file_slice_size() { + if (config_.contains(knowhere::INDEX_FILE_SLICE_SIZE_IN_MEGABYTE)) { + return config_[knowhere::INDEX_FILE_SLICE_SIZE_IN_MEGABYTE].get(); + } + return 4; // by default +} + std::unique_ptr IndexWrapper::Query(const knowhere::DatasetPtr& dataset) { return std::move(QueryImpl(dataset, config_)); diff --git a/internal/core/src/indexbuilder/IndexWrapper.h b/internal/core/src/indexbuilder/IndexWrapper.h index ad5227b108e59f1ba9b6c461a243e4d103dd9bf0..e462400b110672f40667fcb4c97d65a83c3c7be1 100644 --- a/internal/core/src/indexbuilder/IndexWrapper.h +++ b/internal/core/src/indexbuilder/IndexWrapper.h @@ -65,6 +65,9 @@ class IndexWrapper { knowhere::IndexMode get_index_mode(); + int64_t + get_index_file_slice_size(); + template std::optional get_config_by_name(std::string name);