switch search to use full text search
refactor: DRY