Consultar String Com e Sem Acentos...

264 views
Skip to first unread message

Leonardo Lima

unread,
Sep 14, 2011, 10:59:40 AM9/14/11
to nhiber...@googlegroups.com
Olá pessoal,

Estou com um problema, preciso fazer a busca em strings sem importar o
acento... ou seja, o campo no banco está salvo como João, mas se o
usuário digitar joao, este registro deve ser localizado...
Até agora estou pesquisando, e vi que no Postgres eu tenho de fazer
uma function para isso... até ai beleza, o problema é que estou usando
LINQ to NHibernate, então o que eu tive de idéia agora, fazer uma
extension ContainsSemAcento, ai na hora que eu usar essa extension é
traduzido para o SQL correto usando a function...

Agora o que eu preciso saber é:
1) Estou falando besteira? Tem alguma forma mais fácil de fazer ou mais eficaz?
2) Alguem tem idéia de como começar a fazer isso? e Se é possível fazer isso???

Acabei de pesquisar sobre o to_ascii do Postgres, mas o banco está em
UTF-8 ou seja não vou conseguir usar...

Por favor, preciso de opniões

Muito Obrigado

Att.
Leonardo Lima

Ricardo Borges

unread,
Sep 14, 2011, 12:58:28 PM9/14/11
to nhiber...@googlegroups.com
Acho que se voce tiver uma funcao no postgresql ou vc mesmo fez uma .... pode usa-la na sintaxe do HQL...

--
Você está recebendo esta mensagem porque se inscreveu no grupo "NHibernate-Br" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para nhiber...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para nhibernate-b...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/nhibernate-br?hl=pt-BR.




--
Ricardo

Leonardo Lima

unread,
Sep 14, 2011, 1:22:53 PM9/14/11
to nhiber...@googlegroups.com
Olá Ricardo,

Eu já achei uma função para isso... o problema é como eu faço para
usar ela através do NHibernate???

Muito Obrigado

Leonardo

Em 14 de setembro de 2011 13:58, Ricardo Borges
<ricard...@gmail.com> escreveu:

Ricardo Borges

unread,
Sep 14, 2011, 1:34:51 PM9/14/11
to nhiber...@googlegroups.com
ja tentou usar no HQL ?

Rafael Vasconcellos

unread,
Sep 14, 2011, 1:45:26 PM9/14/11
to nhiber...@googlegroups.com
Tem um algoritmo que resolve esse problema. Ele faz a busca fonética.

Por exemplo: uma busca por João, joão, JOão, joao retorna os mesmos resultados.

Dá uma pesquisada por Soundex. Tem até uma implementação para o português.


Em 14 de setembro de 2011 11:59, Leonardo Lima <goo...@leonardolima.com.br> escreveu:

Diogo Menezes

unread,
Sep 14, 2011, 2:49:08 PM9/14/11
to nhiber...@googlegroups.com
Não é mais facil resolver isso com o collate ?
--
Abraços,

Diogo Menezes
http://dmenezes.com.br
http://twitter.com/diogolmenezes

Leonardo Lima

unread,
Sep 14, 2011, 3:51:43 PM9/14/11
to nhiber...@googlegroups.com
Olá pessoal,

Consegui resolver meu problema...

1) Tive de criar uma função no postgres para remover os acentos...
http://battisti.etc.br/2009/06/18/consulta-sem-acento-postgres/

2) Tive de criar um método de Extension do LINQ para usar está função
http://www.primordialcode.com/blog/post/nhibernate-customize-linq-provider-user-defined-sql-functions
http://www.primordialcode.com/blog/post/nhibernate-3-extending-linq-provider-fix-notsupportedexception

Eu poderia ter utilizado Criteria que ficaria bem mais fácil, mas eu
iria judiar um bocado da equipe... que teria de aprender coisa nova...

Mas enfim... muito obrigado :D

Att.
Leonardo Lima

Em 14 de setembro de 2011 15:49, Diogo Menezes
<diogol...@gmail.com> escreveu:

Danimar

unread,
Sep 15, 2011, 3:51:27 PM9/15/11
to NHibernate-Br
Criar uma coluna adicional, para pesquisar. Na hora de salvar vc
remove acentos, transforma tudo para maiusculo.
Você vai ganhar bastante velocidade na hora de fazer ordenações,
consultas etc. E resolve o teu problema.

É uma dica.

On Sep 14, 4:51 pm, Leonardo Lima <goo...@leonardolima.com.br> wrote:
> Olá pessoal,
>
> Consegui resolver meu problema...
>
> 1) Tive de criar uma função no postgres para remover os acentos...http://battisti.etc.br/2009/06/18/consulta-sem-acento-postgres/
>
> 2) Tive de criar um método de Extension do LINQ para usar está funçãohttp://www.primordialcode.com/blog/post/nhibernate-customize-linq-pro...http://www.primordialcode.com/blog/post/nhibernate-3-extending-linq-p...
>
> Eu poderia ter utilizado Criteria que ficaria bem mais fácil, mas eu
> iria judiar um bocado da equipe... que teria de aprender coisa nova...
>
> Mas enfim... muito obrigado :D
>
> Att.
> Leonardo Lima
>
> Em 14 de setembro de 2011 15:49, Diogo Menezes
> <diogolmene...@gmail.com> escreveu:
>
>
>
>
>
>
>
> > Não é mais facil resolver isso com o collate ?
>
> > Em 14 de setembro de 2011 14:45, Rafael Vasconcellos
> > <rfl.vasconcel...@gmail.com> escreveu:

Carlos Mendes

unread,
Sep 15, 2011, 3:53:12 PM9/15/11
to nhiber...@googlegroups.com
Já fiz isso que o Danimar falou e fui feliz com a solução. :)

--
Carlos Mendes
Software Developer
+55 85 9171 1594
http://br.linkedin.com/pub/carlos-mendes/29/489/178

Juan Lopes

unread,
Sep 15, 2011, 4:03:02 PM9/15/11
to nhiber...@googlegroups.com
Meu. Deus.

2011/9/15 Carlos Mendes <cmen...@gmail.com>

Bruno D'Alessio

unread,
Sep 15, 2011, 4:04:35 PM9/15/11
to nhiber...@googlegroups.com
[2]
O Extract Method é seu amigo!

"Vocês riem de mim por ser diferente, eu rio de vocês por serem todos iguais..." (Bob Marley)

Bruno D'Alessio
Arquiteto de Software
(21) 9441-1214
GTALK: bruno...@gmail.com
MSN: brun...@hotmail.com


Bruno Gross

unread,
Sep 15, 2011, 4:08:08 PM9/15/11
to nhiber...@googlegroups.com
[3]

2011/9/15 Bruno D'Alessio <bruno...@gmail.com>



--
Visite:
DotNet Br
Compras no Exterior

att.
Bruno Gross
(21) 83422729

Diogo Menezes

unread,
Sep 15, 2011, 4:11:39 PM9/15/11
to nhiber...@googlegroups.com
Era só ter usado o Collate do banco...

Leonardo Lima

unread,
Sep 15, 2011, 4:14:48 PM9/15/11
to nhiber...@googlegroups.com
para bota mais lenha na fogueira...

esse pessoal não leu que o banco é postgres... não tem a função
collate, e ninguem deu bola para solução que eu consegui ???


Leonardo

Em 15 de setembro de 2011 17:11, Diogo Menezes
<diogol...@gmail.com> escreveu:

Diogo Menezes

unread,
Sep 15, 2011, 4:37:17 PM9/15/11
to nhiber...@googlegroups.com
Quam disse que não tem collate???????????

Danimar

unread,
Sep 15, 2011, 5:02:54 PM9/15/11
to NHibernate-Br
Gambi?

Me deêm uma solução elegante usando NHibernate, para o banco de dados
Postgres, eu já sofri bastante com isso e estou até hoje procurando
uma solução para resolver este problema da pesquisa. O collate
sinceramente não sei como funciona, não consegui fazer ele pesquisar
os acentos.




On Sep 15, 5:37 pm, Diogo Menezes <diogolmene...@gmail.com> wrote:
> Quam disse que não tem collate???????????
>
> http://www.postgresql.org/docs/9.1/static/collation.html
>
> Em 15 de setembro de 2011 17:14, Leonardo Lima
> <goo...@leonardolima.com.br>escreveu:
>
>
>
>
>
>
>
> > para bota mais lenha na fogueira...
>
> > esse pessoal não leu que o banco é postgres... não tem a função
> > collate, e ninguem deu bola para solução que eu consegui ???
>
> > Leonardo
>
> > Em 15 de setembro de 2011 17:11, Diogo Menezes
> > <diogolmene...@gmail.com> escreveu:
> > > Era só ter usado o Collate do banco...
>
> > > Em 15 de setembro de 2011 17:08, Bruno Gross <brunogr...@gmail.com>
> > > escreveu:
>
> > >> [3]
>
> > >> 2011/9/15 Bruno D'Alessio <brunodot...@gmail.com>
>
> > >>> [2]
>
> > >>> Em 15 de setembro de 2011 17:03, Juan Lopes <zerova...@gmail.com>
> > >>> escreveu:
>
> > >>>> Meu. Deus.
> > >>>> 2011/9/15 Carlos Mendes <cmende...@gmail.com>
>
> > >>>>> Já fiz isso que o Danimar falou e fui feliz com a solução. :)
>
> > >>>>> --
> > >>>>> Carlos Mendes
> > >>>>> Software Developer
> > >>>>> +55 85 9171 1594
> > >>>>>http://br.linkedin.com/pub/carlos-mendes/29/489/178
>
> > >>>>> Em 15 de setembro de 2011 16:51, Danimar <danimaribe...@gmail.com>
> > >>>>> escreveu:
>
> > >>>>>> Criar uma coluna adicional, para pesquisar. Na hora de salvar vc
> > >>>>>> remove acentos, transforma tudo para maiusculo.
> > >>>>>> Você vai ganhar bastante velocidade na hora de fazer ordenações,
> > >>>>>> consultas etc. E resolve o teu problema.
>
> > >>>>>> É uma dica.
>
> > >>>>>> On Sep 14, 4:51 pm, Leonardo Lima <goo...@leonardolima.com.br>
> > wrote:
> > >>>>>> > Olá pessoal,
>
> > >>>>>> > Consegui resolver meu problema...
>
> > >>>>>> > 1) Tive de criar uma função no postgres para remover os
> > >>>>>> > acentos...
> >http://battisti.etc.br/2009/06/18/consulta-sem-acento-postgres/
>
> > >>>>>> > 2) Tive de criar um método de Extension do LINQ para usar está
> > >>>>>> > funçãohttp://
> >www.primordialcode.com/blog/post/nhibernate-customize-linq-pro...http....
> > ..
> > >>> GTALK: brunodot...@gmail.com
> > >>> MSN: brunoj...@hotmail.com
> ...
>
> read more »

Leonardo Lima

unread,
Sep 15, 2011, 5:35:22 PM9/15/11
to nhiber...@googlegroups.com
Danimar,

Consegui resolver deste modo:

1) Tive de criar uma função no postgres para remover os acentos...
http://battisti.etc.br/2009/06/18/consulta-sem-acento-postgres/

2) Tive de criar um método de Extension do LINQ para usar está função
http://www.primordialcode.com/blog/post/nhibernate-customize-linq-provider-user-defined-sql-functions
http://www.primordialcode.com/blog/post/nhibernate-3-extending-linq-provider-fix-notsupportedexception

Não sei vc está usando NHibernate.LINQ, mas se estiver usando
Criteria, só usar uma criteria .Sql chamando a função sem_acentos...

Leonardo

Danimar

unread,
Sep 16, 2011, 7:19:01 AM9/16/11
to NHibernate-Br
Ja conhecia esta solução.

Não sei que problemas de desempenho posso ter na frente, com esta
função.
Alguém saberia dizer, como os indices se comportariam?
Essa função não seria muito custosa para o banco?


On Sep 15, 6:35 pm, Leonardo Lima <goo...@leonardolima.com.br> wrote:
> Danimar,
>
> Consegui resolver deste modo:
>
> 1) Tive de criar uma função no postgres para remover os acentos...http://battisti.etc.br/2009/06/18/consulta-sem-acento-postgres/
>
> 2) Tive de criar um método de Extension do LINQ para usar está funçãohttp://www.primordialcode.com/blog/post/nhibernate-customize-linq-pro...http://www.primordialcode.com/blog/post/nhibernate-3-extending-linq-p...
>
> Não sei vc está usando NHibernate.LINQ, mas se estiver usando
> Criteria, só usar uma criteria .Sql chamando a função sem_acentos...
>
> Leonardo
>

> read more »
Reply all
Reply to author
Forward
0 new messages