У меня есть полные фразы, мне нужно искать в документах. Команды plainto_tsquery () или фразуto_tsquery () имеют ограничительный характер и дают несоответствие, как только во фразе есть слово, которого нет в документе.
Я хотел бы сначала найти все слова фразы, а если нет совпадения, некоторые из них.
Я начал анализировать фразу и создавать вторичные запросы вручную, но это немного тривиально. Например, если моя фраза «Я люблю сияющие звезды», я бы сделал
select *, ts_rank(to_tsvector(description), query) as rank
from skill, to_tsquery('(I & like & shining & stars') query
where query @@ to_tsvector(description)
order by rank desc
select *, ts_rank(to_tsvector(description), query) as rank
from skill, to_tsquery('(like & shining & stars') query
where query @@ to_tsvector(description)
order by rank desc;
select *, ts_rank(to_tsvector(description), query) as rank
from skill, to_tsquery('(I & shining & stars') query
where query @@ to_tsvector(description)
order by rank desc;
select *, ts_rank(to_tsvector(description), query) as rank
from skill, to_tsquery('(I & like & stars') query
where query @@ to_tsvector(description)
order by rank desc;
и т.д ...
Это что-то вроде «недостающего» слова в поисковой системе Google
Есть ли лучший способ сделать это?
Спасибо