Skip to content

[Feature] Add multi-query batch search support #1684

@LHT129

Description

@LHT129

Description

Enable VSAG search operations to support multiple queries in a single call, leveraging the existing multi-element capability of DatasetPtr.

Background

Currently, search methods (KnnSearch, RangeSearch, SearchWithRequest) only accept a single query vector (NumElements=1). However, DatasetPtr already supports multiple elements through its NumElements API. Allowing batch queries would improve efficiency by reducing API call overhead and enabling better optimization opportunities.

Requirements

  • Modify HGraph::SearchWithRequest to support multi-query search
  • Update HGraph::KnnSearch and RangeSearch for batch operations
  • Update SparseIndex::KnnSearch and RangeSearch for multi-query
  • Update SINDI::KnnSearch and RangeSearch for multi-query
  • Ensure backward compatibility (single query still works)
  • Update error messages for clarity

Technical Details

  • Remove `GetNumElements() == 1` restrictions
  • Loop over each query vector using `get_data(query, q_idx)`
  • Concatenate results: for N queries with k results each, return N*k elements
  • IteratorContext-based search remains single-query only due to state tracking

Acceptance Criteria

  • Multi-query search returns correct results for HGraph index
  • Multi-query search returns correct results for SparseIndex
  • Multi-query search returns correct results for SINDI
  • Single query behavior unchanged
  • Unit tests pass
  • Release build successful

Related

  • Original task file: batch_query.md
  • Implementation plan: plan.md

Notes

  • Results are concatenated in query order: [q0_0..q0_k-1, q1_0..q1_k-1, ...]
  • IteratorContext-based search explicitly requires NumElements=1

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions