feat(store): replace FTS5 default ranking with weighted BM25#526
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthrough
ChangesWeighted BM25 FTS5 Ranking
Estimated code review effort: 2 (Simple) | ~8 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Heads up: I opened #537 for issue #140, which changes the same Merge-order note:
The intended final FTS branch shape is roughly: bm25(observations_fts, 5.0, 1.0, 0.0, 0.0, 0.0, 3.0) as rank
...
WHERE observations_fts MATCH ? AND o.deleted_at IS NULL
ORDER BY rankThe |
0accd50
into
Gentleman-Programming:main
There was a problem hiding this comment.
Pull request overview
This PR updates Engram’s SQLite FTS5-backed observation search ranking to use an explicit weighted BM25 score instead of the default fts.rank, so results prioritize matches in higher-signal columns (notably title and topic_key) within Store.Search.
Changes:
- Replaced
fts.rankwithbm25(observations_fts, 5.0, 1.0, 0.0, 0.0, 0.0, 3.0) AS rankin theStore.SearchFTS query and updated theORDER BYto use the new alias. - Added a unit test ensuring a title match ranks ahead of a content-only match for the same query term.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| internal/store/store.go | Updates the observations FTS query to use weighted BM25 scoring and orders by the computed rank. |
| internal/store/store_test.go | Adds a regression test validating the intended ranking preference (title > content). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Closes #241
PR Type
type:bug— Bug fixtype:feature— New featuretype:docs— Documentation onlytype:refactor— Code refactoring (no behavior change)type:chore— Maintenance, dependencies, toolingtype:breaking-change— Breaking changeSummary
fts.rank) inStore.Searchquery with a weighted BM25 query:bm25(observations_fts, 5.0, 1.0, 0.0, 0.0, 0.0, 3.0).title(5.0 weight) andtopic_key(3.0 weight) over lower-relevance columns liketool_nameortype.Changes
internal/store/store.gofts.rankwithbm25(...)query and updateORDER BYclauseinternal/store/store_test.goTestSearch_WeightedBM25Rankingunit testTest Plan
go test ./...go test -tags e2e ./internal/server/...Contributor Checklist
Closes #241)type:*label to this PRCo-Authored-Bytrailers in commitsSummary by CodeRabbit