The titles tier of search_meetings (src/db/meetings.rs) matches title LIKE %query% COLLATE NOCASE: the entire query as a single substring. Every other tier (transcripts, notes, panels) goes through FTS5 with implicit-AND semantics, where each word must appear but in any order.
So grans grep "review budget" --in titles misses a meeting titled "Budget review", while the same query finds it in transcripts. The README's description of grep ("matches every word in the query, in any order") is inaccurate for the titles tier, and the divergence also feeds hybrid search, where the FTS list seeds keyword_ids and keyword_total.
Two ways to resolve it:
- Tokenize the titles tier: AND of per-token
LIKE clauses (or index titles in FTS). Consistent semantics everywhere, but it changes grep counts, hybrid keyword_total, and the FTS candidate list, so it needs a quality-benchmark before/after run and a look at how the title-hit ranking tier should treat partial-token matches.
- Keep the behavior and document it: title matches require the query as a contiguous substring.
Option 1 is the first-principles fix; filing as triage because it moves retrieval behavior and deserves the benchmark gate. Noted during the #65 review (PR #73); pre-existing behavior, unchanged by that PR.
The titles tier of
search_meetings(src/db/meetings.rs) matchestitle LIKE %query% COLLATE NOCASE: the entire query as a single substring. Every other tier (transcripts, notes, panels) goes through FTS5 with implicit-AND semantics, where each word must appear but in any order.So
grans grep "review budget" --in titlesmisses a meeting titled "Budget review", while the same query finds it in transcripts. The README's description of grep ("matches every word in the query, in any order") is inaccurate for the titles tier, and the divergence also feeds hybrid search, where the FTS list seedskeyword_idsandkeyword_total.Two ways to resolve it:
LIKEclauses (or index titles in FTS). Consistent semantics everywhere, but it changes grep counts, hybridkeyword_total, and the FTS candidate list, so it needs a quality-benchmark before/after run and a look at how the title-hit ranking tier should treat partial-token matches.Option 1 is the first-principles fix; filing as triage because it moves retrieval behavior and deserves the benchmark gate. Noted during the #65 review (PR #73); pre-existing behavior, unchanged by that PR.