Felipe,

http://franciscosumma.blogspot.com.br/2016/01/busca-textual-sinonimos-relevancia-e.html

Espero ajudar.

Att,
ChIcO Summa

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

> Opa chico,
>
> Muito bacana! Vou testar esse seu exemplo parece uma otima solução.
>
> Obrigado!
>
> Em 6 de janeiro de 2016 16:24, ChIcO <franciscosu...@gmail.com> escreveu:
>
>> 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
>>
>
>
>
> --
>
> 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