I feel like re-implementing `text` and `text_phrase` is a hack, yes. I feel like pyelasticsearch or elasticutils should provide a better way to do this (and maybe they do, and I just don't know it)