Skip to content

Conversation

@bsbodden
Copy link
Collaborator

Add flexible sort specification API to support multiple sorting formats:

  • Single field string: sortBy("price")
  • Field with direction: sortBy("price", "DESC")
  • SortField object: sortBy(SortField.desc("price"))
  • Multiple fields: sortBy(List.of(SortField.desc("price"), SortField.asc("rating")))

Implementation details:

  • Created SortField class to represent field name and sort direction
  • Created SortSpec utility with parseSortSpec() methods for normalization
  • Updated FilterQuery, VectorQuery, VectorRangeQuery, and TextQuery builders
  • Added warning when multiple fields specified (Redis limitation - only first used)
  • Validates sort direction must be "ASC" or "DESC" (case-insensitive)

Test coverage:

  • 11 unit tests in SortSpecTest for parsing and validation
  • 21 unit tests in MultiFieldSortingTest for query builder integration
  • All existing tests continue to pass

Maintains backward compatibility with existing sortBy(String) and sortAscending/sortDescending methods.

Refs: redis/redis-vl-python#393
Fixes: #373

Add flexible sort specification API to support multiple sorting formats:
- Single field string: sortBy("price")
- Field with direction: sortBy("price", "DESC")
- SortField object: sortBy(SortField.desc("price"))
- Multiple fields: sortBy(List.of(SortField.desc("price"), SortField.asc("rating")))

Implementation details:
- Created SortField class to represent field name and sort direction
- Created SortSpec utility with parseSortSpec() methods for normalization
- Updated FilterQuery, VectorQuery, VectorRangeQuery, and TextQuery builders
- Added warning when multiple fields specified (Redis limitation - only first used)
- Validates sort direction must be "ASC" or "DESC" (case-insensitive)

Test coverage:
- 11 unit tests in SortSpecTest for parsing and validation
- 21 unit tests in MultiFieldSortingTest for query builder integration
- All existing tests continue to pass

Maintains backward compatibility with existing sortBy(String) and
sortAscending/sortDescending methods.

Refs: redis/redis-vl-python#393
@bsbodden bsbodden force-pushed the bsb/multi_field_sorting_fix branch from 8f03877 to fb9ba55 Compare October 22, 2025 23:19
@bsbodden bsbodden merged commit 3d92bad into main Oct 22, 2025
4 checks passed
@bsbodden bsbodden deleted the bsb/multi_field_sorting_fix branch October 22, 2025 23:22
@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