Felipe,

Entendi o que você precisa.
O tsearch2 você pode utilizar os operadores &(and) |(or) ^(not) quase
contemplando toda sua necessidade.
Se quiser fazer uma busca trazendo N resultados e ordenar por relevância
você pode utilizar o ts_rank ou o ts_rank_cd. Nesse link[1] tem exemplo.
Só cuidado se for alterar os pesos e fazer union, para o sua relevância vir
de forma correta.

Realizei testes baixando a base de servidores do município de curitiba e
irei colocar duas consultas para vc ter uma ideia do uso da relevância.
Quando encontra os 3 termos pesquisados juntos ele vem por primeiro, os 3
separados por segundo, dois juntos por terceiro, ...

Estou pesquisando as Vantagens do Allan Henrique e retornando uma coluna
disp já com *BOLD* nas palavras pesquisadas. ts_headline [2]
# OU - Vantagens Allan Henrique
SELECT ts_rank_cd(fti, to_tsquery(replace('vantagens allan henrique','
','|'))) AS Relevancia,
nome,cargo,lotacao,descricao_evento,tipo_evento
,ts_headline(nome||' '||cargo||' '||lotacao||' '||descricao_evento||'
'||tipo_evento, to_tsquery(replace('vantagens allan henrique',' ','|')))
disp
FROM servidores
WHERE fti @@ to_tsquery(replace('vantagens allan henrique',' ','|'))
ORDER BY relevancia DESC;

# AND - Vantagens Allan Henrique
SELECT ts_rank_cd(fti, to_tsquery(replace('vantagens allan henrique','
','&'))) AS Relevancia,
nome,cargo,lotacao,descricao_evento,tipo_evento
,ts_headline(nome||' '||cargo||' '||lotacao||' '||descricao_evento||'
'||tipo_evento, to_tsquery(replace('vantagens allan henrique',' ','|')))
disp
FROM servidores
WHERE fti @@ to_tsquery(replace('vantagens allan henrique',' ','&'))
ORDER BY relevancia DESC;

# AND/OR - Vantagens Allan ou Henrique
SELECT ts_rank_cd(fti, to_tsquery('vantagens&(allan|henrique)')) AS
Relevancia,
nome,cargo,lotacao,descricao_evento,tipo_evento
,ts_headline(nome||' '||cargo||' '||lotacao||' '||descricao_evento||'
'||tipo_evento, to_tsquery(replace('vantagens allan henrique',' ','|')))
disp
FROM servidores
WHERE fti @@ to_tsquery('vantagens&(allan|henrique)')
ORDER BY relevancia DESC;


Outro detalhe interessante do tsearch2 é que pode ser utilizado um
dicionário de sinônimos e vocês especificar por exemplo: carro = automóvel,
professor = educador, ... assim a sua pesquisa consegue resultados
melhores. [3]


[1] http://linuxgazette.net/164/sephton.html
[2]
http://www.postgresql.org/docs/9.4/static/textsearch-controls.html#TEXTSEARCH-HEADLINE
[3]
http://www.postgresql.org/docs/9.4/static/textsearch-dictionaries.html#TEXTSEARCH-SYNONYM-DICTIONARY
[*] http://www.postgresql.org/docs/9.4/static/textsearch.html



Att,
Francisco Summa

Em 6 de janeiro de 2016 10:28, Felipe Moura <felipegu...@gmail.com>
escreveu:

> Opa, valeu Sebastian, esses links ja ajudaram bastante, chegando em uma
> solução posto aqui para quem precisar de algo semelhante.
>
> Grato!
>
> Em 5 de janeiro de 2016 21:26, Sebastian Webber <sebast...@swebber.me>
> escreveu:
>
>>
>>
>> Em 5 de janeiro de 2016 18:02, Felipe Moura <felipegu...@gmail.com>
>> escreveu:
>>
>>> Fala pessoal,
>>>
>>> Estamos com a necessidade de fazer uma pesquisa full-text por relevância
>>> e por separação de dados conforme a função full-text search do mysql.
>>>
>>
>> Boa noite!
>>
>> Chegastes a dar uma olhada na doc[1] oficial? Se dar uma procurada no
>> histórico vai ter uma penca de referencias que podem te apoiar. Como esse
>> post maneiro[2] do HJort.
>>
>> Caso tenhas alguma duvida mais específica, me avise.
>>
>> []'s
>>
>> [1] http://www.postgresql.org/docs/9.4/static/textsearch.html
>> [2] http://www.hjort.co/2011/07/full-text-search-em-portugues-no.html
>>
>>
>>
>> --
>> Sebastian Webber
>> http://swebber.me
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>
>
>
> --
>
> Atenciosamente,
>
> Felipe Moura
> Desenvolvedor
> http://about.me/felipewebdf
> twitter: @felipewebdf
> talk: felipegu...@gmail.com
>
> (61) 8490-8156
>
>
> *Não é da benevolência do padeiro, do açougueiro ou do cervejeiro que eu
> espero que saia o meu jantar, mas sim do empenho deles em promover seu
> "auto-interesse".*
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a