Конечно же не единственный.
Можно посмотреть на форму KMAction.
Вот как сделано там
Можно вынести установку фильтра на кнопки.
Можно много чего делать вместо синтакскического анализа.
И гораздо проще.
А если уж так хочется делать синтаксический анализ и не можешь перехватить событие поиска, то попробуй перехватить exequteQuery. Там на входе ты получишь готовый query. Его и анализируй.