Details
-
Bug
-
Status: Open (View Workflow)
-
Major
-
Resolution: Unresolved
-
None
-
None
Description
vector search with Cosine Distance, the recall rate of the returned results is very low.
abs2 in FVector is memory value, when we load data from disk, we need init abs2 = 1.0f
The fix code is as follows
diff --git a/sql/vector_mhnsw.cc b/sql/vector_mhnsw.cc
|
index d8a63a7558c..91256a31910 100644
|
--- a/sql/vector_mhnsw.cc
|
+++ b/sql/vector_mhnsw.cc
|
@@ -820,7 +820,7 @@ int FVectorNode::load_from_record(TABLE *graph)
|
FVector *vec_ptr= FVector::align_ptr(tref() + tref_len());
|
memcpy(vec_ptr->data(), v->ptr(), v->length());
|
vec_ptr->postprocess(ctx->vec_len);
|
-
|
+ if (ctx->metric == COSINE) vec_ptr->abs2 = 1.0f;
|
longlong layer= graph->field[FIELD_LAYER]->val_int();
|
if (layer > 100) // 10e30 nodes at M=2, more at larger M's
|
return my_errno= HA_ERR_CRASHED; |
Attachments
Issue Links
- blocks
-
MDEV-33408 HNSW for k-ANN vector searches
-
- Closed
-
- relates to
-
MDEV-36313 VEC_DISTANCE_COSINE return error value
-
- Closed
-
Activity
Field | Original Value | New Value |
---|---|---|
Link |
This issue blocks |
Assignee | Sergei Golubchik [ serg ] |
Description |
vector search with Cosine Distance, the recall rate of the returned results is very low.
abs2 in FVector is memory value, when we load data from disk, we need init abs2 = 1.0f The fix code is as follows ``` diff --git a/sql/vector_mhnsw.cc b/sql/vector_mhnsw.cc index d8a63a7558c..91256a31910 100644 --- a/sql/vector_mhnsw.cc +++ b/sql/vector_mhnsw.cc @@ -820,7 +820,7 @@ int FVectorNode::load_from_record(TABLE *graph) FVector *vec_ptr= FVector::align_ptr(tref() + tref_len()); memcpy(vec_ptr->data(), v->ptr(), v->length()); vec_ptr->postprocess(ctx->vec_len); - + if (ctx->metric == COSINE) vec_ptr->abs2 = 1.0f; longlong layer= graph->field[FIELD_LAYER]->val_int(); if (layer > 100) // 10e30 nodes at M=2, more at larger M's return my_errno= HA_ERR_CRASHED; ``` |
vector search with Cosine Distance, the recall rate of the returned results is very low.
abs2 in FVector is memory value, when we load data from disk, we need init abs2 = 1.0f The fix code is as follows {code:diff} diff --git a/sql/vector_mhnsw.cc b/sql/vector_mhnsw.cc index d8a63a7558c..91256a31910 100644 --- a/sql/vector_mhnsw.cc +++ b/sql/vector_mhnsw.cc @@ -820,7 +820,7 @@ int FVectorNode::load_from_record(TABLE *graph) FVector *vec_ptr= FVector::align_ptr(tref() + tref_len()); memcpy(vec_ptr->data(), v->ptr(), v->length()); vec_ptr->postprocess(ctx->vec_len); - + if (ctx->metric == COSINE) vec_ptr->abs2 = 1.0f; longlong layer= graph->field[FIELD_LAYER]->val_int(); if (layer > 100) // 10e30 nodes at M=2, more at larger M's return my_errno= HA_ERR_CRASHED; {code} |
Status | Open [ 1 ] | Needs Feedback [ 10501 ] |
Priority | Minor [ 4 ] | Major [ 3 ] |
Fix Version/s | 11.8 [ 29921 ] |
Status | Needs Feedback [ 10501 ] | Open [ 1 ] |
Component/s | Vector search [ 20205 ] |
Link |
This issue relates to |