keywordOverlap

open override fun keywordOverlap(base: PropositionQuery, tokens: List<String>, limit: Int): List<Proposition>

Case-insensitive keyword-overlap probe pushed into the DB. The typed DSL has no case-insensitive CONTAINS and no list-comprehension, and there's no full-text index (see luceneSyntaxNotes), so this drops to hand-written Cypher: size([t IN $tokens WHERE toLower(p.text) CONTAINS t]) > 0, ordered by that overlap then effective confidence. Only the structured filters this statement understands are handled; a base carrying anything else (entity, level, temporal, non-default decay, …) falls back to the portable default, which still pushes base's filters through query.