Ir para conteúdo

Arquivado

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

marcos_cav

é possivel uma busca tipo dos buscadores em sql?

Recommended Posts

Boa tarde a todos!

 

tenho um banco de dados que armazena perguntas de um site de vendas online.

 

quando eu vou responder a pergunta, eu preciso que o sistema pesquise no banco perguntas similares e mostre na tela.

 

Mais eu nao to conseguindo, ele sempre me volta perguntas que nao tem nada a ver.

 

Por exemplo :

eu tenho a seguinte pergunta: "Ola, qual é o valor do envio para minha cidade?"

 

 

eu faço assim: eu quebro a string da pergunta pelos espaços, e mando para o sql usando o like,ficando assim:

 

SELECT *
FROM   PERGUNTAS
WHERE  TEXTODAPERGUNTA
LIKE '%OLA%' OR TEXTODAPERGUNTA LIKE '%QUAL%' OR TEXTODAPERGUNTA LIKE '%VALOR%' OR TEXTODAPERGUNTA LIKE '%ENVIO%' ......

 

só que ai ele ira me trazer todas as perguntas que tem as palavras "ola" , "qual" etc ou seja, ira vir resultados que nao tem nada a ver com a pergunta.

 

ou seja, resumindo tudo, eu preciso de um select, que traga os resultados, os resultados mais parecidos com a pergunta original primeiro, ai depois ele te que "combinar" palavras, ou seja usando 2 ou mais palavras como chave, ai por ultimo é que veria essa consulta ai de cima. claro tirando os resultados repetidos

 

resumindo o resumo. eu quero fazer uma consulta SQL tipo a consulta dos sites de buscadores.

 

 

 

talvez eu consiga usado o UNION, o problema é que, se uma pergunta tiver 12 palavras chave, eu teria que =, para combinar essas 12 chaves, fazer 12x12 selects, o que daria 144 selects, ou seja, ficaria inviável.

 

 

Gostaria de saber se alguem tem alguma ideia de como fazer isso.

 

 

Espero que tenham entendido a minha dúvida.

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma saida

 

 

SELECT *
FROM TABELA
WHERE (CHARINDEX(CAMPO,'VALOR') > 0
       OR
       CHARINDEX(CAMPO,'ENVIO') > 0
       ... )
ORDER BY ( SIGN(CHARINDEX(CAMPO,'VALOR')) + 
           SIGN(CHARINDEX(CAMPO,'ENVIO')) ...) desc

Mas pesquise por FULL TEXT SEARCH todavia

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola Motta

 

 

Muito obrigado pela ajuda, deu muito trabalho para entender o seu select rsrs.

 

realmente não consegui resolver o problema, porem vou estudar a solução proposta.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
CHARINDEX(CAMPO,'VALOR') retorna a posição em que a string "VALOR" ocorre em CAMPO, sendo 0 (MINHA QUERY DEVERIA SER > 0) indica que não ocorreu.
SIGN(CHARINDEX(CAMPO,'VALOR')) retorna 1 se ocorreu 0 se não ocorreu, somando 

as ocorrências teremos os registros de maior relevância (mais palavras encontradas).

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.