milvus-sdk-cpp icon indicating copy to clipboard operation
milvus-sdk-cpp copied to clipboard

HNSW Search: Changing ef Has No Effect on Recall (Milvus C++ SDK)

Open AdeelAslamSoton opened this issue 7 months ago • 3 comments

Hi all,

I'm using the Milvus C++ SDK with an HNSW index and testing different ef values during search:

int total_efs[] = {20, 40, 60, 100, 200, 300, 400, 500, 600, 800, 1000, 1200, 1500, 1700, 1900, 2100};

In each search:

ef is set via AddExtraParam("ef", total_efs[i])

I'm using ParallelFor with 40 threads

TopK is 10, metric is L2

Each result is saved per query

❗ Problem No matter how high I set ef, recall stays the same. I expected higher ef to improve recall (at the cost of speed), but that’s not happening, I already use HNSW for collection construction

❓ Questions Does ef work at search time for HNSW in Milvus C++ SDK?

Code snippt for search is here milvus::SearchArguments arguments; arguments.SetCollectionName(collection_name); arguments.SetTopK(10); arguments.SetMetricType(milvus::MetricType::L2); arguments.AddExtraParam("ef", total_efs[i]);

if (!data_vectors.first.empty()) { arguments.SetExpression(data_vectors.first[row]); } arguments.AddTargetVector(vector_field_name, data_vectors.second[row]); arguments.AddOutputField(filter_field_name); arguments.AddOutputField("id");

milvus::SearchResults results; status = client->Search(arguments, results);

Thanks 🙏

AdeelAslamSoton avatar Apr 21 '25 14:04 AdeelAslamSoton