Принимая во внимание тот факт, что англ sh, используемый PostgreSQL, не использует сравнительные и превосходные степени (я должен думать, что это сделано по замыслу, а не просто по ошибке), в PostgreSQL нет разумного способа сделать это. из коробки.
select to_tsvector('english','funny funnier funniest big bigger biggest');
to_tsvector
-------------------------------------------------------------------
'big':4 'bigger':5 'biggest':6 'funni':1 'funnier':2 'funniest':3
Но если вы установите словарь english_hunspell (сам по себе не тривиальный), вы сможете приблизиться к тому, что вы хотите, по крайней мере, для одного примера, который вы даете .
create text search configuration english_hun (copy = english);
ALTER TEXT SEARCH CONFIGURATION english_hun alter mapping replace english_stem with english_hunspell;
select to_tsvector('english_hun','funny funnier funniest big bigger biggest');
to_tsvector
----------------------------------------------
'big':4 'bigger':5 'biggest':6 'funny':1,2,3
Наиболее распространенные предлоги - это уже стоп-слова, но не все из них, поэтому вам может понадобиться настроить список стоп-слов.
После выполнения обычного соответствия (@@ ) Вы могли бы добавить условие AND, убедившись, что длина tsvector и tsquery одинакова. Это будет соответствовать «смешная собака смешно», что мне не ясно, хотите вы или нет.