Skip to content

Add OrderByNgramRank for relevance-sorted ngram search results - #4231

Merged
jeremydmiller merged 1 commit into
masterfrom
feature/4037-delete-where-linq
Apr 6, 2026
Merged

jeremydmiller merged 1 commit into
masterfrom
feature/4037-delete-where-linq

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Summary

  • New LINQ extension: OrderByNgramRank(x => x.Field, "search term")
  • Generates ORDER BY ts_rank(mt_grams_vector(...), mt_grams_query(...)) DESC
  • Allows ngram search results to be sorted by relevance without raw SQL
  • Works with Select(), Take(), and other LINQ operators

Closes #4037

Usage

var results = await session
    .Query<User>()
    .Where(x => x.SearchString.NgramSearch("search term"))
    .OrderByNgramRank(x => x.SearchString, "search term")
    .ToListAsync();

Implementation

  • New OrderByNgramRankOperator LinqOperator that captures the member expression and search term
  • Extended Ordering class with NgramRank-specific properties for deferred member resolution at SQL compilation time
  • Added internal Options accessor to CollectionUsage for schema name access

Test plan

  • 2 new tests (basic ranking, ranking with Select projection)
  • 12/12 total ngram tests passing, zero regressions

🤖 Generated with Claude Code

New LINQ extension: OrderByNgramRank(x => x.Field, "search term")
Generates: ORDER BY ts_rank(mt_grams_vector(...), mt_grams_query(...)) DESC

Implementation:
- New OrderByNgramRankOperator that stores member expression + search term
  and resolves to ts_rank SQL at compilation time
- Extended Ordering class with NgramRank-specific properties for deferred
  member resolution
- Added internal Options accessor to CollectionUsage

Tests: 2 new tests (basic ranking, ranking with Select)
12/12 total ngram tests passing, zero regressions.
Documentation added to docs/documents/full-text.md.

Closes #4037

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jeremydmiller
jeremydmiller merged commit 2e66460 into master Apr 6, 2026
6 checks passed
@jeremydmiller
jeremydmiller deleted the feature/4037-delete-where-linq branch April 6, 2026 18:55
This was referenced May 11, 2026
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.

Sorting results of an NgramSearch by relevance

1 participant