Ir para conteúdo

POWERED BY:

Arquivado

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

borsato

Sistema de busca interno do site

Recommended Posts

FATOS:

 

1. No banco de dados ( ACCESS ) tem um produto cadastrado da seguinte forma:

 

nome_produto:

CARTÃO DE MEMÓRIA MEMORY STICK MICRO M2 1GB ( também funciona como MEMORY STICK PRO DUO ) - SANDISK

 

descricao_produto:

"<table cellspacing=""5"" width=""100%"" border=""0""><tr><td colspan=""2""><b>DESCRIÇÃO</b><br/><br/>O cartão de memória “M2” tem aproximadamente ¼ do tamanho do Memory Stick Pro Duo, com apenas 1.2mm de espessura. Foi desenvolvido para os celulares Sony Ericsson, e acompanha adaptador para transformar-se em Memory Stick Pro Duo e ser utlizado também em Câmeras digitais Sony. Possui um controle de ejeção para prevenir a perda de dados e facilitar a remoção do adaptador. <br/></tr></table>

2. Quando faço uma busca no sistema interno do site com os termos:

- cartão de memória memory stick pro duo = nenhum resultado encontrado

- cartão memory stick pro duo = nenhum resultado encontrado

- memory stick pro duo = mostra o produto cadastrado

 

3. No sistema de busca está sendo utilizado o seguinte comando SQL:

 

Query_produtos = "SELECT Produtos.codigo_produto, ... ,Produtos.sigla_idioma FROM Categorias INNER JOIN Produtos ON Categorias.codigo_categoria = Produtos.codigo_categoria WHERE (nome_produto like '%" & produto & "%' OR descricao_produto LIKE '%" & produto & "%') AND Produtos.codigo_categoria = "&request("codigo_categoria")&" AND Produtos.sigla_idioma = '"&varLang&"' AND Categorias.sigla_idioma = '"&varLang&"' " & queryORDERBY

 

PERGUNTO:

Como faço para melhorar o desempenho deste sistema de busca ?

Alguma dica ou sugestão ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

nem vai achar, a frase digitada não existe na tabela.

 

bom, você quer melhorar o desempenho, como descreveu que o "problema" é não encontrar determinadas frases então julgo a questão não como melhorar o desempenho mas sim funcional.

Para procurar por uma ou mais palavras de uma frase transforme a frase em array, faça a busca no banco por cada palavra, ai sim você tem que ter cuidado com desempenho pois se a frase tiver muitas palavras o sistema vai ficar lento. Aconselho você limitar a quantidade de caracterteres minimos de cada palavra e se possivel crie uma coluna contendo palavras chaves e faça a busca somente nessa coluna(tipo meta tag)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez uma solução legal, seria criar uma tabela de palavras chaves para cada produto, asism quando for fazer a busca você busca nessa tabela, e se encontrar algo, vai estar relacionando ao código do produto então você conseguirá jogar o user para o local correto quando a busca terminar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estava com mesmo problema, achei isso e utilizei, melhorou bastante

 

ASP
function preparaPalavra(str)

preparaPalavra = replace(str,"a","[a,á,à,ã,â,ä]")

preparaPalavra = replace(preparaPalavra,"e","[e,é,è,ê,ë]")

preparaPalavra = replace(preparaPalavra,"i","[i,í,ì,î,ï]")

preparaPalavra = replace(preparaPalavra,"o","[o,ó,ò,õ,ô,ö]")

preparaPalavra = replace(preparaPalavra,"u","[u,ú,ù,û,ü]")

preparaPalavra = replace(preparaPalavra,"c","[c,ç]")

preparaPalavra = preparaPalavra

end function

 

Buscaproduto = LCase(Request("produto"))

 

SQL = "SELECT *  FROM TBProdutos WHERE NomeProd LIKE '%"&preparaPalavra(Buscaproduto)&"%' ORDER BY NomeProd DESC"

 

Quem sabe pode ajudar tambem!

Falou!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá mellosp !

 

Vou incluir essa sugestão também !

Assim dispensa o trabalho de ficar incluindo no campo "palavras_chave" toda a variação de palavras acentuadas ...

 

Obrigado pela sugestão !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que a função "preparaPalavra" não está correta, veja:

 

quando digito: Pelúcia

o resultado fica: p[e,é,è,ê,ë]lú[c,ç][i,í,ì,î,ï][a,á,à,ã,â,ä]

 

o resultado correto não seria: pelucia ( ? )

Compartilhar este post


Link para o post
Compartilhar em outros sites

corrigi assim:

 

function preparaPalavra(str)

preparaPalavra = replace(str,"á","a")

preparaPalavra = replace(preparaPalavra,"à","a")

preparaPalavra = replace(preparaPalavra,"ã","a")

preparaPalavra = replace(preparaPalavra,"â","a")

preparaPalavra = replace(preparaPalavra,"ä","a")

preparaPalavra = replace(preparaPalavra,"é","e")

preparaPalavra = replace(preparaPalavra,"è","e")

preparaPalavra = replace(preparaPalavra,"ê","e")

preparaPalavra = replace(preparaPalavra,"ë","e")

preparaPalavra = replace(preparaPalavra,"í","i")

preparaPalavra = replace(preparaPalavra,"ì","i")

preparaPalavra = replace(preparaPalavra,"î","i")

preparaPalavra = replace(preparaPalavra,"ï","i")

preparaPalavra = replace(preparaPalavra,"ó","o")

preparaPalavra = replace(preparaPalavra,"ò","o")

preparaPalavra = replace(preparaPalavra,"õ","o")

preparaPalavra = replace(preparaPalavra,"ô","o")

preparaPalavra = replace(preparaPalavra,"ö","o")

preparaPalavra = replace(preparaPalavra,"ú","u")

preparaPalavra = replace(preparaPalavra,"ù","u")

preparaPalavra = replace(preparaPalavra,"û","u")

preparaPalavra = replace(preparaPalavra,"ü","u")

preparaPalavra = replace(preparaPalavra,"ç","c")

preparaPalavra = preparaPalavra

end function

agora digitando: Pelúcia

fica: pelucia

 

Acho que é isso ...

Alguma outra sugestão ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei exatamente como postado e o resultado foi:

 

quando digitava: Pelúcia

o resultado ficava: p[e,é,è,ê,ë]lú[c,ç][i,í,ì,î,ï][a,á,à,ã,â,ä]

 

o resultado era pra ser esse mesmo ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei exatamente como postado e o resultado foi:

 

quando digitava: Pelúcia

o resultado ficava: p[e,é,è,ê,ë]lú[c,ç][i,í,ì,î,ï][a,á,à,ã,â,ä]

 

o resultado era pra ser esse mesmo ?!

é esse resultado mesmo que deve aparecer, no sql server sei que funciona, creio que nos outros bancos seja a mesma coisa pois é uma "função" do sql script

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.