PostgreSQL FTS полные фразы как запрос - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть полные фразы, мне нужно искать в документах. Команды 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

Есть ли лучший способ сделать это?

Спасибо

...