fix: some typos in hnsw index (#50)

This commit is contained in:
姚军 2026-02-03 10:41:21 +08:00 committed by GitHub
parent ce45478dae
commit ea9d957893
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 52 additions and 51 deletions

View File

@ -24,7 +24,7 @@
namespace zvec {
namespace core {
HnswBuilder::HnswBuilder() {}
HnswBuilder::HnswBuilder() = default;
int HnswBuilder::init(const IndexMeta &meta, const ailego::Params &params) {
LOG_INFO("Begin HnswBuilder::init");

View File

@ -41,7 +41,7 @@ int HnswContext::init(ContextType type) {
switch (type) {
case kBuilderContext:
ret = visit_filter_.init(VisitFilter::ByteMap, entity_->doc_cnt(),
max_scan_num_, negative_probility_);
max_scan_num_, negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
@ -52,7 +52,7 @@ int HnswContext::init(ContextType type) {
case kSearcherContext:
ret = visit_filter_.init(filter_mode_, entity_->doc_cnt(), max_scan_num_,
negative_probility_);
negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
@ -68,7 +68,7 @@ int HnswContext::init(ContextType type) {
max_scan_num_ = compute_max_scan_num(doc_cnt);
reserve_max_doc_cnt_ = doc_cnt + compute_reserve_cnt(doc_cnt);
ret = visit_filter_.init(filter_mode_, reserve_max_doc_cnt_,
max_scan_num_, negative_probility_);
max_scan_num_, negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
@ -111,7 +111,7 @@ int HnswContext::update(const ailego::Params &params) {
}
}
float prob = negative_probility_;
float prob = negative_probability_;
p.clear();
switch (type_) {
case kSearcherContext:
@ -123,7 +123,7 @@ int HnswContext::update(const ailego::Params &params) {
}
params.get(p, &prob);
if (filter_mode_ == VisitFilter::BloomFilter &&
std::abs(prob - negative_probility_) > 1e-6) {
std::abs(prob - negative_probability_) > 1e-6) {
need_update = true;
}
if (need_update) {
@ -135,7 +135,7 @@ int HnswContext::update(const ailego::Params &params) {
max_doc_cnt = reserve_max_doc_cnt_;
}
int ret = visit_filter_.init(filter_mode_, max_doc_cnt, max_scan_num_,
negative_probility_);
negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;

View File

@ -301,8 +301,8 @@ class HnswContext : public IndexContext {
filter_mode_ = v;
}
inline void set_filter_negative_probility(float v) {
negative_probility_ = v;
inline void set_filter_negative_probability(float v) {
negative_probability_ = v;
}
inline void set_max_scan_ratio(float v) {
@ -501,7 +501,7 @@ class HnswContext : public IndexContext {
uint32_t topk_{0};
uint32_t group_topk_{0};
uint32_t filter_mode_{VisitFilter::ByteMap};
float negative_probility_{HnswEntity::kDefaultBFNegativeProbility};
float negative_probability_{HnswEntity::kDefaultBFNegativeProbability};
uint32_t ef_{HnswEntity::kDefaultEf};
float max_scan_ratio_{HnswEntity::kDefaultScanRatio};
uint32_t magic_{0U};

View File

@ -506,7 +506,7 @@ class HnswEntity {
constexpr static uint32_t kDefaultMinScanLimit = 10000;
constexpr static uint32_t kDefaultMaxScanLimit =
std::numeric_limits<uint32_t>::max();
constexpr static float kDefaultBFNegativeProbility = 0.001f;
constexpr static float kDefaultBFNegativeProbability = 0.001f;
constexpr static uint32_t kDefaultScalingFactor = 50U;
constexpr static uint32_t kDefaultBruteForceThreshold = 1000U;
constexpr static uint32_t kDefaultDocsHardLimit = 1 << 30U; // 1 billion

View File

@ -19,9 +19,9 @@
namespace zvec {
namespace core {
HnswSearcher::HnswSearcher() {}
HnswSearcher::HnswSearcher() = default;
HnswSearcher::~HnswSearcher() {}
HnswSearcher::~HnswSearcher() = default;
int HnswSearcher::init(const ailego::Params &search_params) {
params_ = search_params;
@ -32,7 +32,7 @@ int HnswSearcher::init(const ailego::Params &search_params) {
params_.get(PARAM_HNSW_SEARCHER_NEIGHBORS_IN_MEMORY_ENABLE,
&neighbors_in_memory_enabled_);
params_.get(PARAM_HNSW_SEARCHER_VISIT_BLOOMFILTER_NEGATIVE_PROB,
&bf_negative_probility_);
&bf_negative_probability_);
params_.get(PARAM_HNSW_SEARCHER_BRUTE_FORCE_THRESHOLD,
&bruteforce_threshold_);
params_.get(PARAM_HNSW_SEARCHER_FORCE_PADDING_RESULT_ENABLE,
@ -41,7 +41,7 @@ int HnswSearcher::init(const ailego::Params &search_params) {
if (ef_ == 0) {
ef_ = HnswEntity::kDefaultEf;
}
if (bf_negative_probility_ <= 0.0f || bf_negative_probility_ >= 1.0f) {
if (bf_negative_probability_ <= 0.0f || bf_negative_probability_ >= 1.0f) {
LOG_ERROR("[%s] must be in range (0,1)",
PARAM_HNSW_SEARCHER_VISIT_BLOOMFILTER_NEGATIVE_PROB.c_str());
return IndexError_InvalidArgument;
@ -56,7 +56,7 @@ int HnswSearcher::init(const ailego::Params &search_params) {
"neighborsInMemoryEnabled=%u bfNagtiveProb=%f bruteForceThreshold=%u "
"forcePadding=%u",
ef_, max_scan_ratio_, bf_enabled_, check_crc_enabled_,
neighbors_in_memory_enabled_, bf_negative_probility_,
neighbors_in_memory_enabled_, bf_negative_probability_,
bruteforce_threshold_, force_padding_topk_enabled_);
return 0;
@ -90,7 +90,7 @@ int HnswSearcher::cleanup() {
max_scan_num_ = 0U;
ef_ = HnswEntity::kDefaultEf;
bf_enabled_ = false;
bf_negative_probility_ = HnswEntity::kDefaultBFNegativeProbility;
bf_negative_probability_ = HnswEntity::kDefaultBFNegativeProbability;
bruteforce_threshold_ = HnswEntity::kDefaultBruteForceThreshold;
check_crc_enabled_ = false;
neighbors_in_memory_enabled_ = false;
@ -425,7 +425,7 @@ IndexSearcher::Context::Pointer HnswSearcher::create_context() const {
uint32_t filter_mode =
bf_enabled_ ? VisitFilter::BloomFilter : VisitFilter::ByteMap;
ctx->set_filter_mode(filter_mode);
ctx->set_filter_negative_probility(bf_negative_probility_);
ctx->set_filter_negative_probability(bf_negative_probability_);
ctx->set_magic(magic_);
ctx->set_force_padding_topk(force_padding_topk_enabled_);
ctx->set_bruteforce_threshold(bruteforce_threshold_);

View File

@ -129,7 +129,7 @@ class HnswSearcher : public IndexSearcher {
bool check_crc_enabled_{false};
bool neighbors_in_memory_enabled_{false};
bool force_padding_topk_enabled_{false};
float bf_negative_probility_{HnswEntity::kDefaultBFNegativeProbility};
float bf_negative_probability_{HnswEntity::kDefaultBFNegativeProbability};
uint32_t magic_{0U};
State state_{STATE_INIT};

View File

@ -175,7 +175,7 @@ int HnswStreamer::init(const IndexMeta &imeta, const ailego::Params &params) {
"Init params: maxIndexSize=%zu docsHardLimit=%zu docsSoftLimit=%zu "
"efConstruction=%u ef=%u upperMaxNeighborCnt=%u l0MaxNeighborCnt=%u "
"scalingFactor=%u maxScanRatio=%.3f minScanLimit=%zu maxScanLimit=%zu "
"bfEnabled=%d bruteFoceThreshold=%zu bfNegativeProbility=%.5f "
"bfEnabled=%d bruteFoceThreshold=%zu bfNegativeProbability=%.5f "
"checkCrcEnabled=%d pruneSize=%zu vectorSize=%u chunkSize=%zu "
"filterSameKey=%u getVectorEnabled=%u minNeighborCount=%u "
"forcePadding=%u ",
@ -227,7 +227,7 @@ int HnswStreamer::cleanup(void) {
max_scan_limit_ = HnswEntity::kDefaultMaxScanLimit;
min_scan_limit_ = HnswEntity::kDefaultMinScanLimit;
chunk_size_ = HnswEntity::kDefaultChunkSize;
bf_negative_prob_ = HnswEntity::kDefaultBFNegativeProbility;
bf_negative_prob_ = HnswEntity::kDefaultBFNegativeProbability;
max_scan_ratio_ = HnswEntity::kDefaultScanRatio;
state_ = STATE_INIT;
check_crc_enabled_ = false;
@ -281,7 +281,7 @@ int HnswStreamer::open(IndexStorage::Pointer stg) {
}
ret = metric_->init(meta_, meta_.metric_params());
if (ret != 0) {
LOG_ERROR("Failled to init metric, ret=%d", ret);
LOG_ERROR("Failed to init metric, ret=%d", ret);
return ret;
}
@ -375,7 +375,7 @@ IndexStreamer::Context::Pointer HnswStreamer::create_context(void) const {
ctx->set_max_scan_ratio(max_scan_ratio_);
ctx->set_filter_mode(bf_enabled_ ? VisitFilter::BloomFilter
: VisitFilter::ByteMap);
ctx->set_filter_negative_probility(bf_negative_prob_);
ctx->set_filter_negative_probability(bf_negative_prob_);
ctx->set_magic(magic_);
ctx->set_force_padding_topk(force_padding_topk_enabled_);
ctx->set_bruteforce_threshold(bruteforce_threshold_);
@ -488,7 +488,7 @@ int HnswStreamer::add_with_id_impl(uint32_t id, const void *query,
ret = alg_->add_node(id, level, ctx);
if (ailego_unlikely(ret != 0)) {
LOG_ERROR("Hnsw stramer add node failed");
LOG_ERROR("Hnsw steamer add node failed");
(*stats_.mutable_discarded_count())++;
return ret;
}
@ -569,7 +569,7 @@ int HnswStreamer::add_impl(uint64_t pkey, const void *query,
ret = alg_->add_node(id, level, ctx);
if (ailego_unlikely(ret != 0)) {
LOG_ERROR("Hnsw stramer add node failed");
LOG_ERROR("Hnsw steamer add node failed");
(*stats_.mutable_discarded_count())++;
return ret;
}

View File

@ -208,7 +208,7 @@ class HnswStreamer : public IndexStreamer {
size_t bruteforce_threshold_{HnswEntity::kDefaultBruteForceThreshold};
size_t max_scan_limit_{HnswEntity::kDefaultMaxScanLimit};
size_t min_scan_limit_{HnswEntity::kDefaultMinScanLimit};
float bf_negative_prob_{HnswEntity::kDefaultBFNegativeProbility};
float bf_negative_prob_{HnswEntity::kDefaultBFNegativeProbability};
float max_scan_ratio_{HnswEntity::kDefaultScanRatio};
uint32_t magic_{0U};

View File

@ -35,7 +35,7 @@ int HnswSparseContext::init(ContextType type) {
switch (type) {
case kSparseBuilderContext:
ret = visit_filter_.init(VisitFilter::ByteMap, entity_->doc_cnt(),
max_scan_num_, negative_probility_);
max_scan_num_, negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
@ -46,7 +46,7 @@ int HnswSparseContext::init(ContextType type) {
case kSparseSearcherContext:
ret = visit_filter_.init(filter_mode_, entity_->doc_cnt(), max_scan_num_,
negative_probility_);
negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
@ -62,7 +62,7 @@ int HnswSparseContext::init(ContextType type) {
max_scan_num_ = compute_max_scan_num(doc_cnt);
reserve_max_doc_cnt_ = doc_cnt + compute_reserve_cnt(doc_cnt);
ret = visit_filter_.init(filter_mode_, reserve_max_doc_cnt_,
max_scan_num_, negative_probility_);
max_scan_num_, negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;
@ -107,7 +107,7 @@ int HnswSparseContext::update(const ailego::Params &params) {
}
}
float prob = negative_probility_;
float prob = negative_probability_;
p.clear();
switch (type_) {
case kSparseSearcherContext:
@ -119,7 +119,7 @@ int HnswSparseContext::update(const ailego::Params &params) {
}
params.get(p, &prob);
if (filter_mode_ == VisitFilter::BloomFilter &&
std::abs(prob - negative_probility_) > 1e-6) {
std::abs(prob - negative_probability_) > 1e-6) {
need_update = true;
}
if (need_update) {
@ -131,7 +131,7 @@ int HnswSparseContext::update(const ailego::Params &params) {
max_doc_cnt = reserve_max_doc_cnt_;
}
int ret = visit_filter_.init(filter_mode_, max_doc_cnt, max_scan_num_,
negative_probility_);
negative_probability_);
if (ret != 0) {
LOG_ERROR("Create filter failed, mode %d", filter_mode_);
return ret;

View File

@ -297,8 +297,8 @@ class HnswSparseContext : public IndexContext {
filter_mode_ = v;
}
inline void set_filter_negative_probility(float v) {
negative_probility_ = v;
inline void set_filter_negative_probability(float v) {
negative_probability_ = v;
}
inline void set_max_scan_ratio(float v) {
@ -494,7 +494,7 @@ class HnswSparseContext : public IndexContext {
uint32_t topk_{0};
uint32_t group_topk_{0};
uint32_t filter_mode_{VisitFilter::ByteMap};
float negative_probility_{HnswSparseEntity::kDefaultBFNegativeProbility};
float negative_probability_{HnswSparseEntity::kDefaultBFNegativeProbability};
uint32_t ef_{HnswSparseEntity::kDefaultEf};
float max_scan_ratio_{HnswSparseEntity::kDefaultScanRatio};
uint32_t magic_{0U};

View File

@ -595,7 +595,7 @@ class HnswSparseEntity {
constexpr static uint32_t kDefaultMinScanLimit = 10000;
constexpr static uint32_t kDefaultMaxScanLimit =
std::numeric_limits<uint32_t>::max();
constexpr static float kDefaultBFNegativeProbility = 0.001f;
constexpr static float kDefaultBFNegativeProbability = 0.001f;
constexpr static uint32_t kDefaultScalingFactor = 50U;
constexpr static uint32_t kDefaultBruteForceThreshold = 1000U;
constexpr static uint32_t kDefaultDocsHardLimit = 1 << 30U; // 1 billion

View File

@ -33,7 +33,7 @@ int HnswSparseSearcher::init(const ailego::Params &search_params) {
params_.get(PARAM_HNSW_SPARSE_SEARCHER_NEIGHBORS_IN_MEMORY_ENABLE,
&neighbors_in_memory_enabled_);
params_.get(PARAM_HNSW_SPARSE_SEARCHER_VISIT_BLOOMFILTER_NEGATIVE_PROB,
&bf_negative_probility_);
&bf_negative_probability_);
params_.get(PARAM_HNSW_SPARSE_SEARCHER_BRUTE_FORCE_THRESHOLD,
&bruteforce_threshold_);
params_.get(PARAM_HNSW_SPARSE_SEARCHER_FORCE_PADDING_RESULT_ENABLE,
@ -46,7 +46,7 @@ int HnswSparseSearcher::init(const ailego::Params &search_params) {
if (ef_ == 0) {
ef_ = HnswSparseEntity::kDefaultEf;
}
if (bf_negative_probility_ <= 0.0f || bf_negative_probility_ >= 1.0f) {
if (bf_negative_probability_ <= 0.0f || bf_negative_probability_ >= 1.0f) {
LOG_ERROR(
"[%s] must be in range (0,1)",
PARAM_HNSW_SPARSE_SEARCHER_VISIT_BLOOMFILTER_NEGATIVE_PROB.c_str());
@ -69,7 +69,7 @@ int HnswSparseSearcher::init(const ailego::Params &search_params) {
"neighborsInMemoryEnabled=%u bfNagtiveProb=%f bruteForceThreshold=%u "
"forcePadding=%u filteringRatio=%f",
ef_, max_scan_ratio_, bf_enabled_, check_crc_enabled_,
neighbors_in_memory_enabled_, bf_negative_probility_,
neighbors_in_memory_enabled_, bf_negative_probability_,
bruteforce_threshold_, force_padding_topk_enabled_,
query_filtering_ratio_);
@ -104,7 +104,7 @@ int HnswSparseSearcher::cleanup() {
max_scan_num_ = 0U;
ef_ = HnswSparseEntity::kDefaultEf;
bf_enabled_ = false;
bf_negative_probility_ = HnswSparseEntity::kDefaultBFNegativeProbility;
bf_negative_probability_ = HnswSparseEntity::kDefaultBFNegativeProbability;
bruteforce_threshold_ = HnswSparseEntity::kDefaultBruteForceThreshold;
check_crc_enabled_ = false;
neighbors_in_memory_enabled_ = false;
@ -524,7 +524,7 @@ IndexSearcher::Context::Pointer HnswSparseSearcher::create_context() const {
uint32_t filter_mode =
bf_enabled_ ? VisitFilter::BloomFilter : VisitFilter::ByteMap;
ctx->set_filter_mode(filter_mode);
ctx->set_filter_negative_probility(bf_negative_probility_);
ctx->set_filter_negative_probability(bf_negative_probability_);
ctx->set_magic(magic_);
ctx->set_force_padding_topk(force_padding_topk_enabled_);
ctx->set_bruteforce_threshold(bruteforce_threshold_);

View File

@ -144,7 +144,8 @@ class HnswSparseSearcher : public IndexSearcher {
bool check_crc_enabled_{false};
bool neighbors_in_memory_enabled_{false};
bool force_padding_topk_enabled_{false};
float bf_negative_probility_{HnswSparseEntity::kDefaultBFNegativeProbility};
float bf_negative_probability_{
HnswSparseEntity::kDefaultBFNegativeProbability};
bool query_filtering_enabled_{false};
float query_filtering_ratio_{HnswSparseEntity::kDefaultQueryFilteringRatio};

View File

@ -191,7 +191,7 @@ int HnswSparseStreamer::init(const IndexMeta &imeta,
"Init params: maxIndexSize=%zu docsHardLimit=%zu docsSoftLimit=%zu "
"efConstruction=%u ef=%u l0NeighborCnt=%u upperNeighborCnt=%u "
"scalingFactor=%u maxScanRatio=%.3f minScanLimit=%zu maxScanLimit=%zu "
"bfEnabled=%d bruteFoceThreshold=%zu bfNegativeProbility=%.5f "
"bfEnabled=%d bruteFoceThreshold=%zu bfNegativeProbability=%.5f "
"checkCrcEnabled=%d pruneSize=%zu chunkSize=%zu "
"filterSameKey=%u getVectorEnabled=%u "
"minNeighborCount=%u forcePadding=%u filteringRatio=%f",
@ -242,7 +242,7 @@ int HnswSparseStreamer::cleanup(void) {
max_scan_limit_ = HnswSparseEntity::kDefaultMaxScanLimit;
min_scan_limit_ = HnswSparseEntity::kDefaultMinScanLimit;
chunk_size_ = HnswSparseEntity::kDefaultChunkSize;
bf_negative_prob_ = HnswSparseEntity::kDefaultBFNegativeProbility;
bf_negative_prob_ = HnswSparseEntity::kDefaultBFNegativeProbability;
max_scan_ratio_ = HnswSparseEntity::kDefaultScanRatio;
state_ = STATE_INIT;
check_crc_enabled_ = false;
@ -384,7 +384,7 @@ IndexStreamer::Context::Pointer HnswSparseStreamer::create_context(void) const {
ctx->set_max_scan_ratio(max_scan_ratio_);
ctx->set_filter_mode(bf_enabled_ ? VisitFilter::BloomFilter
: VisitFilter::ByteMap);
ctx->set_filter_negative_probility(bf_negative_prob_);
ctx->set_filter_negative_probability(bf_negative_prob_);
ctx->set_magic(magic_);
ctx->set_force_padding_topk(force_padding_topk_enabled_);
ctx->set_bruteforce_threshold(bruteforce_threshold_);

View File

@ -200,7 +200,7 @@ class HnswSparseStreamer : public IndexStreamer {
size_t bruteforce_threshold_{HnswSparseEntity::kDefaultBruteForceThreshold};
size_t max_scan_limit_{HnswSparseEntity::kDefaultMaxScanLimit};
size_t min_scan_limit_{HnswSparseEntity::kDefaultMinScanLimit};
float bf_negative_prob_{HnswSparseEntity::kDefaultBFNegativeProbility};
float bf_negative_prob_{HnswSparseEntity::kDefaultBFNegativeProbability};
float max_scan_ratio_{HnswSparseEntity::kDefaultScanRatio};
float sparse_neighbor_ratio_{HnswSparseEntity::kDefaultSparseNeighborRatio};
uint32_t sparse_neighbor_cnt_{0UL};

View File

@ -601,7 +601,7 @@ int Index::_dense_search(const VectorData &vector_data,
}
// TODO: group by
if (search_param->bf_pks != nullptr) {
// should we elimate the copy of bf_pks?
// should we eliminate the copy of bf_pks?
if (streamer_->search_bf_by_p_keys_impl(
vector, std::vector<std::vector<uint64_t>>{*search_param->bf_pks},
new_meta, 1, context) != 0) {

View File

@ -218,7 +218,7 @@ class VisitBitMap {
template <class... T>
static int init(Context *, void **ctx, uint64_t maxDocCnt,
uint64_t maxScanNum, std::tuple<T...> &&tpl) {
(void)tpl; // unsed warning
(void)tpl; // unused warning
Context *c = new (std::nothrow) Context;
if (c == nullptr) {
LOG_ERROR("New memory in initVisitBitMap failed");
@ -312,7 +312,7 @@ class VisitByteMap {
template <class... T>
static int init(Context *, void **ctx, uint64_t maxDocCnt,
uint64_t maxScanNum, std::tuple<T...> &&tpl) {
(void)tpl; // unsed warning
(void)tpl; // unused warning
Context *c = new (std::nothrow) Context;
if (c == nullptr) {
LOG_ERROR("New memory in initVisitByteMap failed");
@ -403,10 +403,10 @@ class VisitFilter {
}
int init(int mode, uint64_t maxDocCnt, uint64_t maxScanNum,
float negativeProbility) {
float negativeProbability) {
mode_ = mode;
PROXIMA_HNSW_VISITFILTER_CALL_IMPL(init, &ctx_, maxDocCnt, maxScanNum,
std::make_tuple(negativeProbility));
std::make_tuple(negativeProbability));
return 0; // place holder
}