2a2c3aa588
Port from nearai/ironclaw#7553 (Filter::FtsRanked): FTS5's implicit AND between terms means a paraphrased multi-word query misses a stored sentence that lacks even one of the words. When the exact-match search and the substring fallbacks all return zero rows, retry the same unicode61 FTS index with the terms OR-joined, ranked by bm25 so rows covering more terms surface first. Strictly additive: gated on a zero-result miss, so successful searches keep exact-match semantics and ordering. Queries with explicit OR/NOT, single-term queries, and CJK-routed queries are left untouched. Quoted phrases relax as whole units. Adapted for hermes-agent: implemented inside SessionSearchMixin's zero-result fallback chain (after the CJK-bigram/trigram substring retries) rather than as a separate filter variant, reusing the already- built SQL/params so all source/role/sort filters apply to the retry.