Skip to content

Conversation

@bsbodden
Copy link
Collaborator

Add support for searching across multiple vector fields simultaneously with weighted score combination, following Python RedisVL PR #402.

New Classes:

  • Vector: Data container for vector information with validation

    • Stores vector, field name, dtype, and weight
    • Validates dtype against supported Redis types
    • Ensures positive weights and non-empty vectors
  • MultiVectorQuery: Enables multi-vector search with weighted scoring

    • Accepts single or multiple Vector objects
    • Builds VECTOR_RANGE queries with distance threshold 2.0
    • Combines scores using formula: w_1score_1 + w_2score_2 + ...
    • Supports filter expressions and return fields
    • Returns params map with vector_0, vector_1, etc.

Key Features:

  • Simultaneous search across multiple vector fields
  • Weighted score combination
  • Individual score calculations: (2 - distance_i)/2
  • Flexible builder API (single, varargs, list)
  • Comprehensive validation
  • 20 unit tests covering all scenarios

Implementation Details:

  • Distance threshold hardcoded at 2.0 (includes all eligible docs)
  • Vectors may differ in size and datatype
  • Must use cosine distance metric
  • Immutable Vector class with defensive copying
  • Query string format: @field:[VECTOR_RANGE 2.0 $vec]=>{$YIELD_DISTANCE_AS: dist}

Python Reference: redis/redis-vl-python#402

Add support for searching across multiple vector fields simultaneously
with weighted score combination, following Python RedisVL PR #402.

New Classes:
- Vector: Data container for vector information with validation
  - Stores vector, field name, dtype, and weight
  - Validates dtype against supported Redis types
  - Ensures positive weights and non-empty vectors

- MultiVectorQuery: Enables multi-vector search with weighted scoring
  - Accepts single or multiple Vector objects
  - Builds VECTOR_RANGE queries with distance threshold 2.0
  - Combines scores using formula: w_1*score_1 + w_2*score_2 + ...
  - Supports filter expressions and return fields
  - Returns params map with vector_0, vector_1, etc.

Key Features:
- Simultaneous search across multiple vector fields
- Weighted score combination
- Individual score calculations: (2 - distance_i)/2
- Flexible builder API (single, varargs, list)
- Comprehensive validation
- 20 unit tests covering all scenarios

Implementation Details:
- Distance threshold hardcoded at 2.0 (includes all eligible docs)
- Vectors may differ in size and datatype
- Must use cosine distance metric
- Immutable Vector class with defensive copying
- Query string format: @field:[VECTOR_RANGE 2.0 $vec]=>{$YIELD_DISTANCE_AS: dist}

Python Reference: redis/redis-vl-python#402
@bsbodden bsbodden merged commit 6152e77 into main Oct 23, 2025
4 checks passed
@bsbodden bsbodden self-assigned this Oct 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants