Trigram search on all models, refactor to stay DRY.