Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

firebird

[Resolvido] Busca Inteligente

Recommended Posts

Olá Pessoal,

 

Gostaria de fazer uma busca no SQL Server, mas já estou com nós na cabeça de tanto pensar e não cheguei ainda a uma solução que não comprometa muuuito o desempenho.

Vamos ao funcionamento desejável:

 

Imaginem os seguintes produtos:

 

- Computador X5 Core 2 Duo 2GB 500GB

- Computador X5 Dual Core 4GB 1Tera

- Computador Positivo Core I7 8GB 2Tera

- Computador Positivo Pentium 4 1GB 160GB

 

1) Se o cliente buscar por 'computador', retornam-se todos os resultados.

2) Se ele buscar por 'core', retornam-se os produtos 1, 2 e 3

3) se ele buscar por (esse é o pulo do gato..rs) 'dual core', retornam-se produto 2 (o que satisfaz todos os resultados primeiro), em seguida os produtos 1 e 3 (que satisfazem a palavra 'core')

 

Eu faria isso com unions (ou subquerys), mas, o grande problema que vejo é que se o cara buscar por 'computador dual core'

eu teria:

1 union para 'computador dual core'

1 union para 'computador dual'

1 union para 'dual core'

1 union para 'computador core'

1 union para 'computador'

1 union para 'dual'

1 union para 'core'

 

percebem como o desempenho seria sacrificado? isso seria para 3 palavras apenas...quanto mais específica a busca do cliente, mais palavras teriam para se formar o union e mais essa query iria crescer.

 

se o cara buscar por 'computador pentium dual core com wi-fi', é sentar e chorar...uhsauhsauhas

 

 

e ai galera...como resolveremos esse paradigma?

 

:-)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma solução entre outras :

 

Crie uma tabela produto_palavra_chave

 

No cadastramento insira tantas as palavras chaves quanto as que sejam necessárias.

 

produto

-------

01

Computador Positivo Pentium 4 1GB 160GB

...

 

produto_palavra_chave

---------------------

01

Positivo

 

01

Pentium 4

 

"Monte" o SQL de forma dinamica "quebrando" a string de busca em strings individuais

 

Ex : Busca do Cliente Pentium dual core 10GB

 

select *
from produto_palavra_chave
where (palavra_chave = 'Pentium' or palavra_chave = 'dual' ...) 

Alguns BD´s tem soluções para este tipo de busca e no exemplo que passei não resolve o problema da acentuação ou palavras parecidas ou escritas erradas mas é um começo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

alem da tabela que Motta falou, tente tirar uma ideia daki:

http://forum.imasters.com.br/index.php?/topic/223859-utilizando-case-no-where-dinamico/

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.