diff --git a/src/hnsw/hnsw_index.cpp b/src/hnsw/hnsw_index.cpp index 9d4f7a7..e6cef62 100644 --- a/src/hnsw/hnsw_index.cpp +++ b/src/hnsw/hnsw_index.cpp @@ -120,7 +120,8 @@ class LinkedBlockWriter { // Constructor HNSWIndex::HNSWIndex(const string &name, IndexConstraintType index_constraint_type, const vector &column_ids, TableIOManager &table_io_manager, const vector> &unbound_expressions, - AttachedDatabase &db, const case_insensitive_map_t &options, const IndexStorageInfo &info) + AttachedDatabase &db, const case_insensitive_map_t &options, const IndexStorageInfo &info, + idx_t estimated_cardinality) : Index(name, TYPE_NAME, index_constraint_type, column_ids, table_io_manager, unbound_expressions, db) { if (index_constraint_type != IndexConstraintType::NONE) { @@ -173,7 +174,7 @@ HNSWIndex::HNSWIndex(const string &name, IndexConstraintType index_constraint_ty index.load_from_stream( [&](void *data, size_t size) { return size == reader.ReadData(static_cast(data), size); }); } else { - index.reserve(32); + index.reserve(MinValue(static_cast(32), estimated_cardinality)); } index_size = index.size(); } diff --git a/src/hnsw/hnsw_index_physical_create.cpp b/src/hnsw/hnsw_index_physical_create.cpp index 6b32c78..67ba14c 100644 --- a/src/hnsw/hnsw_index_physical_create.cpp +++ b/src/hnsw/hnsw_index_physical_create.cpp @@ -46,8 +46,9 @@ unique_ptr PhysicalCreateHNSWIndex::GetGlobalSinkState(ClientCo auto &constraint_type = info->constraint_type; auto &db = storage.db; - gstate->global_index = make_uniq(info->index_name, constraint_type, storage_ids, table_manager, - unbound_expressions, db, info->options); + gstate->global_index = + make_uniq(info->index_name, constraint_type, storage_ids, table_manager, unbound_expressions, db, + info->options, IndexStorageInfo(), estimated_cardinality); return std::move(gstate); } diff --git a/src/include/hnsw/hnsw_index.hpp b/src/include/hnsw/hnsw_index.hpp index ecfc4cd..04c2470 100644 --- a/src/include/hnsw/hnsw_index.hpp +++ b/src/include/hnsw/hnsw_index.hpp @@ -30,7 +30,7 @@ class HNSWIndex : public Index { HNSWIndex(const string &name, IndexConstraintType index_constraint_type, const vector &column_ids, TableIOManager &table_io_manager, const vector> &unbound_expressions, AttachedDatabase &db, const case_insensitive_map_t &options, - const IndexStorageInfo &info = IndexStorageInfo()); + const IndexStorageInfo &info = IndexStorageInfo(), idx_t estimated_cardinality = 0); //! The actual usearch index unum::usearch::index_dense_t index;