Ir para conteúdo

POWERED BY:

Arquivado

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

dream1702

Sistema de busca com defeito.

Recommended Posts

Oi pesooal preciso da ajuda de vcs mais uma vez

 

Estou com um problema na minha busca, se eu digito de ele retorna pra mim palavras como desodorante... ou seja tudo que tem de.Eu queria que ele pegasse apenas o de sózinho. Tipo: Estado de Sao Paulo.

Lembrando que isso nao acontece apenas com o de acontece com tudo que eu digitar com duas letras.

Ou seja se eu digitar at ele vai encontrar um monte decoisa.

 

Eu ja tentei tiras % colocar %, tirar like mas nada funcionou.

 

Abaixo segue o código que se diz respeito ao like do sql. Obrigado pessoal.

 


strSQL = strSQL & "WHERE Title LIKE '%" & sarySearchWord(0) & "%'"

 

'Dar laços para procurarar por cada palavra de busca incorporada pelo usuário

For intSQLLoopCounter = 0 To UBound(sarySearchWord)

strSQL = strSQL & " OR Title LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"

strSQL = strSQL & " OR Keywords LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"

strSQL = strSQL & " OR Description LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"

Next

 

'Requisitar os resultados da busca pelo número do clique com as batidas que decending (a maioria de locais populares primeiramente)

strSQL = strSQL & " ORDER By Rating DESC, No_of_ratings DESC, Hits DESC;"

 

 

'Se o usuário selecionar para procurarar por todo o intalise das palavras então a indicação do strSQL para procurarar pelas entradas que contêm todas as palavras de busca

Case "allwords"

 

'Procurarar pela primeira palavra nos títulos do URL

strSQL = strSQL & "WHERE (Title LIKE '%" & sarySearchWord(0) & "%'"

 

'Dar laços para procurarar os títulos do URL por cada palavra a ser procurarada

For intSQLLoopCounter = 1 To UBound(sarySearchWord)

strSQL = strSQL & " AND Title LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"

Next

 

'OU se as palavras de busca estiverem nos keywords

strSQL = strSQL & ") OR (Keywords LIKE '%" & sarySearchWord(0) & "%'"

 

'Dar laços para procurarar os keywords do URL por cada palavra a ser procurarada

For intSQLLoopCounter = 1 To UBound(sarySearchWord)

strSQL = strSQL & " AND Keywords LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"

Next

 

'Ou se as palavras de busca estiverem no título

strSQL = strSQL & ") OR (Description LIKE '%" & sarySearchWord(0) & "%'"

 

'Dar laços para procurarar a descrição do URL por cada palavra a ser procurarada

For intSQLLoopCounter = 1 To UBound(sarySearchWord)

strSQL = strSQL & " AND Description LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'"

Next

 

linenums:0'>'Procurarar pela primeira palavra de busca nos títulos do URL strSQL = strSQL & "WHERE Title LIKE '%" & sarySearchWord(0) & "%'" 'Dar laços para procurarar por cada palavra de busca incorporada pelo usuário For intSQLLoopCounter = 0 To UBound(sarySearchWord) strSQL = strSQL & " OR Title LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'" strSQL = strSQL & " OR Keywords LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'" strSQL = strSQL & " OR Description LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'" Next 'Requisitar os resultados da busca pelo número do clique com as batidas que decending (a maioria de locais populares primeiramente) strSQL = strSQL & " ORDER By Rating DESC, No_of_ratings DESC, Hits DESC;" 'Se o usuário selecionar para procurarar por todo o intalise das palavras então a indicação do strSQL para procurarar pelas entradas que contêm todas as palavras de busca Case "allwords" 'Procurarar pela primeira palavra nos títulos do URL strSQL = strSQL & "WHERE (Title LIKE '%" & sarySearchWord(0) & "%'" 'Dar laços para procurarar os títulos do URL por cada palavra a ser procurarada For intSQLLoopCounter = 1 To UBound(sarySearchWord) strSQL = strSQL & " AND Title LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'" Next 'OU se as palavras de busca estiverem nos keywords strSQL = strSQL & ") OR (Keywords LIKE '%" & sarySearchWord(0) & "%'" 'Dar laços para procurarar os keywords do URL por cada palavra a ser procurarada For intSQLLoopCounter = 1 To UBound(sarySearchWord) strSQL = strSQL & " AND Keywords LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'" Next 'Ou se as palavras de busca estiverem no título strSQL = strSQL & ") OR (Description LIKE '%" & sarySearchWord(0) & "%'" 'Dar laços para procurarar a descrição do URL por cada palavra a ser procurarada For intSQLLoopCounter = 1 To UBound(sarySearchWord) strSQL = strSQL & " AND Description LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%'" Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu naum entendi muito bem o que você quer... mas Title LIKE '%" & sarySearchWord(intSQLLoopCounter) & "%' |- é como se fosse tudo que comeca |- tudo que termina com a palavra talSe você quiser por exemplo que quando você digitar "de" ele busque apenas desodorante ou palavras que comecem com de elimine o % do final.Se você quiser por exemplo que quando você digitar "de" ele busque palavras que terminem com de você elimine o % do inicioSe você quiser por exemplo que quando você digitar "de" ele busque palavras que contenham de em qualquer parte (no inicio, no meio, no fim) você deixe os dois como está umd e cada lado...foi isto que eu entendi... se naum for poste denovo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Marcelo

 

Eu quero justamente o que faltou.

Não quero que encontre o de nem no começo da palavra, nem no final e nem no meio.

Quero que encontre apenas a palavra de que estiver cadastrada ou seja:

_______________________________________________

Exemplo da descrição:

 

Existem milhares de carros no estado de São Paulo.(se a pessoa digitasse no pegaria> no estado de...

 

O Brasil ganhou do chile de 4 à0. (se a pessoa digitasse do pegaria > do Chile...

_______________________________________________

 

Pelo que você explicou acho que devo tirar o % do começo e do fim.Mas eu deixei assim ó:

 


strSQL = strSQL & "WHERE Title LIKE '" & sarySearchWord(0) & "'"

 

'Dar laços para procurarar por cada palavra de busca incorporada pelo usuário

For intSQLLoopCounter = 0 To UBound(sarySearchWord)

strSQL = strSQL & " OR Title LIKE '" & sarySearchWord(intSQLLoopCounter) & "'"

strSQL = strSQL & " OR Keywords LIKE '" & sarySearchWord(intSQLLoopCounter) & "'"

strSQL = strSQL & " OR Description LIKE '" & sarySearchWord(intSQLLoopCounter) & "'"

Next linenums:0'>'Procurarar pela primeira palavra de busca nos títulos do URL strSQL = strSQL & "WHERE Title LIKE '" & sarySearchWord(0) & "'" 'Dar laços para procurarar por cada palavra de busca incorporada pelo usuário For intSQLLoopCounter = 0 To UBound(sarySearchWord) strSQL = strSQL & " OR Title LIKE '" & sarySearchWord(intSQLLoopCounter) & "'" strSQL = strSQL & " OR Keywords LIKE '" & sarySearchWord(intSQLLoopCounter) & "'" strSQL = strSQL & " OR Description LIKE '" & sarySearchWord(intSQLLoopCounter) & "'" Next

E parou de pegar qualquer palavra nao pega mais nehuma.Eu queria que ficasse que nem a do google mesmo pegasse a preposição e a palavra que a pessoa digitar.

 

Muito obrigado pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade você deve manter o "%" e acrescentar um " " espaço depois dele, quando for antes da palavra a ser buscada, e antes, quando for depois. Mas isso vai causar outro "efeito colateral" que terás que tratar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

HUm deixa eu ver se eu entendi...Eu fiz assim ó:

'Procurarar pela primeira palavra de busca nos títulos do URL		strSQL = strSQL & "WHERE Title LIKE '""%" & sarySearchWord(0) & "%""'"			'Dar laços para procurarar por cada palavra de busca incorporada pelo usuário		For intSQLLoopCounter = 0 To UBound(sarySearchWord)			strSQL = strSQL & " OR Title LIKE '""%" & sarySearchWord(intSQLLoopCounter) & "%""'"			strSQL = strSQL & " OR Keywords LIKE '""%" & sarySearchWord(intSQLLoopCounter) & "%""'" 			strSQL = strSQL & " OR Description LIKE '""%" & sarySearchWord(intSQLLoopCounter) & "%""'"		Next

Mas ai parou de pegar tbm nao pega mais palavra nenhuma, acho que eu errei feio ai em algo.Nao entendi muito esse ""(espaço)Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites
		'Procurarar pela primeira palavra de busca nos títulos do URL
	strSQL = strSQL & "WHERE Title LIKE '% " & sarySearchWord(0) & " %'"
	'Dar laços para procurarar por cada palavra de busca incorporada pelo usuário
	For intSQLLoopCounter = 0 To UBound(sarySearchWord)
	strSQL = strSQL & " OR Title LIKE '% " & sarySearchWord(intSQLLoopCounter) & " %'"
	strSQL = strSQL & " OR Keywords LIKE '% " & sarySearchWord(intSQLLoopCounter) & " %'"
	strSQL = strSQL & " OR Description LIKE '% " & sarySearchWord(intSQLLoopCounter) & " %'"
	Next

Testa com esse trecho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Salgado.

 

Então o problema de encontar as preposiçoes resolvido ta certinho se eu digito de acha só o deporém parou de pegar algumas palavras chaves.Estranho né? Se bem que você comentou sobre efeitos colaterais.

Mas se resolver isso tah perfeito, nao sei se posso mas vou falar um outro probleminha pq as vezes pode ter a ver.

Eu coloquei para pegar o resultados na descrição em negrito com esse código onde imprime:

Response.Write vbCrLf & " " & Replace (rsSearchResults("Description"), strSearchKeywords, "<b>" & strSearchKeywords & "</b>", 1, -1, 1)
O estranho é que se digito uma palavra ele retorna em negrito perfeitamente se digito duas palavras ele encontra os resultados porem nao retorna nenhuma em negito.

 

Obrigado pela atenção que você esta me dando, esta solucionando um problemaao meu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Era exatamente desse efeito colateral que eu estava falando. Vai ter que pensar em algo, talvez acrescentar de diversas formas nessa busca, como apesnas espaço antes, apenas depois, sem espaços e com espaço antes e depois. Testa com isso.

 

Com relação ao negritar o buscado, você deve criar uma Matriz e fazer o replace usando essa matriz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É pessoal não ta dando mesmo, ja tentei de tudo quanto é jeito mais nao vai o que será que pode ser hem?O sistema continua nao pegando algumas palavras.Da pra entender?Numa descriçao assim por exemplo:A maior cidade do mundose digito (maior) pega certo, só maiorse digito (do) pega certo, só dose digito (cidade) pega certo, só cidadese digito (mundo) diz que nao encontrouNão entendo.Meu cód continua asssim

'Procurarar pela primeira palavra de busca nos títulos do URL        strSQL = strSQL & "WHERE Title LIKE '% " & sarySearchWord(0) & " %'"        'Dar laços para procurarar por cada palavra de busca incorporada pelo usuário        For intSQLLoopCounter = 0 To UBound(sarySearchWord)        strSQL = strSQL & " OR Title LIKE '% " & sarySearchWord(intSQLLoopCounter) & " %'"        strSQL = strSQL & " OR Keywords LIKE '% " & sarySearchWord(intSQLLoopCounter) & " %'"        strSQL = strSQL & " OR Description LIKE '% " & sarySearchWord(intSQLLoopCounter) & " %'"        Next

Falow pessoal Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

tiozinho vou explicar o que esta havendo

 

em todas as palavras da busca voce colocou um espaço antes e um espaço depois

 

entao usando este seu proprio exemplo

 

A maior cidade do mundo

 

nao pegará de jeito nenhum nem o artigo "A" nem o substantivo "mundo"

 

voce nao comentou sobre o "A" mas o efeito ocorre com ele tambem, porque?

 

Porque nao haverá espaço algum antes do "A", assim como nao haverá espaço algum depois do "mundo".

 

Deste modo so funciona para as palavra do meio, isto desde que nao estejam juntos de alguma pontuação

 

Este "metodo alternativo" de colocar estes espaços deixa muito furo para ser tratado

 

voce deve pesar se quer trata-lo ou simplesmente negritas todas as ocorrencias das palavras buscadas mesmo que estas palavras buscadas sejam apenas partes de outras palavras encontradas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi marioufpa

 

Agora!!!!

Eu queria muito tratar esse problema é possivel ? você pode me ajudar?Por onde começar?

 

Se nao vai acontecer o seguinte, se o cara digitar pizza de na busca ele vai retornar um monte de resultados que não é correto inclusive pizzaria , dentista.

 

Eu preciso muito tratar pq de ultimo caso terei que deixar sem pegar algumas palavras. Na verdade não sei o que seria pior.

 

muito Obrigado

 

Um abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

se voce nao quiser que pegue palavras que contenham partes do que foi buscado voce vai ter que encher de OR em sua consulta

 

sempre testando se a palavra inicia registro, se ela termina registro, se ela termina com alguma pontuação, etc

 

vou colocar alguns exemplos aqui e depois voce coloca todas as situações que precisar

é so voce adicionar mais alguns "OR" em sua consulta

 

espaço antes e depois, para as palavras normais que se encontram no meio do registro e sem nenhuma pontuação adjacente

OR Title LIKE '% " & sarySearchWord(intSQLLoopCounter) & " %'"

espaço so depois e sem o % para pegar palavras que iniciem o registro

OR Title LIKE '" & sarySearchWord(intSQLLoopCounter) & " %'"

espaço so antes e sem o % para pegar palavras que finalizem o registro

OR Title LIKE '% " & sarySearchWord(intSQLLoopCounter) & "'"

testanto se tem ponto depois da palavra, isto vale para um teste com virgula ou qualquer outra pontuaçao

OR Title LIKE '% " & sarySearchWord(intSQLLoopCounter) & ".%'"

e assim por diante

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Perfeito

 

Funcionou certinho marioufpa.Eu fiz assim ó vê se ficou correto:

 


strSQL = strSQL & "WHERE Title LIKE '% " & RetiraAcentos(sarySearchWord(0)) & " %'"

'Dar laços para procurarar por cada palavra de busca incorporada pelo usuário

For intSQLLoopCounter = 0 To UBound(sarySearchWord)

strSQL = strSQL & " OR Title LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'"

strSQL = strSQL & " OR Title LIKE '" & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'"

strSQL = strSQL & " OR Title LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & "'"

strSQL = strSQL & " OR Title LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ".%'"

strSQL = strSQL & " OR Title LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ",%'"

strSQL = strSQL & " OR Keywords LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'"

strSQL = strSQL & " OR Keywords LIKE '" & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'"

strSQL = strSQL & " OR Keywords LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & "'"

strSQL = strSQL & " OR Keywords LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ".%'"

strSQL = strSQL & " OR Keywords LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ",%'"

strSQL = strSQL & " OR Description LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'"

strSQL = strSQL & " OR Description LIKE '" & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'"

strSQL = strSQL & " OR Description LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & "'"

strSQL = strSQL & " OR Description LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ".%'"

strSQL = strSQL & " OR Description LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ",%'"

Next _linenums:0'>'Procurarar pela primeira palavra de busca nos títulos do URL strSQL = strSQL & "WHERE Title LIKE '% " & RetiraAcentos(sarySearchWord(0)) & " %'" 'Dar laços para procurarar por cada palavra de busca incorporada pelo usuário For intSQLLoopCounter = 0 To UBound(sarySearchWord) strSQL = strSQL & " OR Title LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'" strSQL = strSQL & " OR Title LIKE '" & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'" strSQL = strSQL & " OR Title LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & "'" strSQL = strSQL & " OR Title LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ".%'" strSQL = strSQL & " OR Title LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ",%'" strSQL = strSQL & " OR Keywords LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'" strSQL = strSQL & " OR Keywords LIKE '" & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'" strSQL = strSQL & " OR Keywords LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & "'" strSQL = strSQL & " OR Keywords LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ".%'" strSQL = strSQL & " OR Keywords LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ",%'" strSQL = strSQL & " OR Description LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'" strSQL = strSQL & " OR Description LIKE '" & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & " %'" strSQL = strSQL & " OR Description LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & "'" strSQL = strSQL & " OR Description LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ".%'" strSQL = strSQL & " OR Description LIKE '% " & RetiraAcentos(sarySearchWord(intSQLLoopCounter)) & ",%'" Next

Esse que está de vermelho eu devo colocar todos os OR também?

 

Gostaria de tirar mais uma dúvida.Muito obrigado pela força.

exemplos:

 

Nessa busca, se eu procurar por pizzaria de são paulo

Se contém na descrição pizzaria de são paulo ele retorna certo, mas... também retorna tudo que tem de tudo que tem são tudo que tem paulo, e assim por diante.E acontece igual ao exemplo 2

 

exemplo 2:

 

Se eu procuro pizza de

Tem um monte resultados com pizza mas ele retorna todos que contém de primeiro e depois os que tem pizza

 

Não sei se seria possivel mas por exemplo o google , yahho , como eles fazem para fazer essa semelhança?

Na verdade seria um lance assim:

Só usar o de ou na ou são e assim por diante se ele vim acompanhado com a palavra.

 

Um abração Deus te abençoe.

 

Muito obrigado http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for pra pegar so o que aparece em todos em vez de OR use AND

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao tiozinho so vai pegar se tiver todas as palavras pesquisadaso OR fara pegar tendo qualquer uma das palavras

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.