Search: Use `match` instead of callbacks
This is a necessary change before multi-term searches can be implemented. This also fixes a bug involving keyword search, which was actually already multi-term, but the bug wasn't immediately visible due to callbacks obfuscating the types.