GIN index
Building a tsvector per row on every search is a full scan. Store it in a generated column and put a GIN index on it: GIN maps each lexeme to the rows that contain it.
task
Add a stored tsvector column tsv (title and body, english) and a GIN index; the match query must use it.