Ir para conteúdo

POWERED BY:

Arquivado

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

Paulo Munari

Busca por Tags

Recommended Posts

Olá pessoal, sou novo por aqui então qualquer coisa me avisem.

 

Tenho uma dúvida para muitos simples, porém pra mim.

 

É o seguinte preciso saber como faz um código de busca interna no site que funcione da seguinte forma:

 

1º A pessoa digita e manda busca (óbvio).

 

2º Essa busca varre todo o site com o get_meta_tags() em busca da frase digitada.

 

3º Filtrar os resultados das tags keywords que sejam semelhantes e exibi-los da seguinte forma:

 

º Titulo, descrição, e url, através das tags que tenhas mais keywords semelhantes.

 

Requisitos:

 

º Exibir 10 resultados por página.

 

º Código em php e comentado.

 

Bem é só, se você poderem colaborar, não necessito código completo se acharem que é demais.

 

Apenas cada um que saiba alguma parte como buscar, fazer exibição, explicando uma parte como fazer já ajuda, pois não quero tudo pronto mesmo, quero aprender a fazer!

 

Obrigado desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem vindo ao fórum! :)

 

Segue alguns Insights:

 

https://www.google.com.br/#q=video+aula+busca+php

 

https://www.google.com.br/#q=tutorial+busca+php

 

https://www.google.com.br/#q=paginacao+php

 

Avançado e que trás os resultados com maior relevância:

https://www.google.com.br/#q=site:stackoverflow.com+full+text+mysql

 

Estude os links acima e em caso de dúvidas poste o que esta fazendo, que vamos lhe ajudando!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voltei, vi vídeos e tutorias, fiz os sistemas de buscas todos funcionais da forma, tempo não foi perdido porque aprendi alguma coisa.

 

Mas a questão buscar por meta-tags não foi resolvida.

 

Exemplo seria:

 

Formulário:

<form method="get" action="/buscar">

<input name="s" type="text" value=""/>
<input type="submit" value="search" />
</form>
Já o início do PHP teria que ser algo assim eu acho:
$tags = get_meta_tags('http://site.com'); // onde teria que dar um explode não sei como para buscar todas as páginas
$tg = $tags['keywords']; // onde pegaria as keywords
$s = $_GET['s']; // onde pegaria o valor da pesquisa
$key = // aqui preciso de algo que coloque as keywords dentro de uma array
// aqui abaixo iria comparar os valores da array com o da busca e ver se seria semelhante
if(in_array($s,$key)){
// e aqui preciso do código que retorne os resultados com descrição, titulo, e url
}
Não entendo isso como faz, pode ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sua busca seria nas páginas do seu site? Seu site é pra publicar postagens? Porque se for, o mais simples é na hora que for publicar a postagem você definir as tags dessa postagem. Depois a busca fica bem mais fácil de montar. Seria algo como o que é aqui no forum mesmo. Quando você cria um post aqui no forum, ele te pede pra dizer quais as tags você acha que deve marcar nessa postagem. Seria algo assim, no seu caso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quase, o site seria dividido em categorias e cada uma tem suas postagens.

 

As meta-tags serão definidas em cada postagem.

 

E preciso que no php ele percorra todas as páginas do site selecionando as que possuam keywords iguais ou semelhantes e listem elas por ordem de que mais tem palavras em comum.

 

Seria apresentado resultados do site no estilo Google.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm.. se cada postagem vai definir suas próprias meta-tags, é só você salvar o caminho dessa postagem e as tags dela no banco de dados, aí você consegue fazer uma busca muito simples fazendo pesquisar o que a pessoa digitar lá no seu banco de dados e retornar só o que for igual ao que estava escrito. Pra isso é só usar a conexão e a pesquisa comum no sql e o método LIKE pra pesquisar as tags. Ou, se preferir de outra forma, nem precisa usar o LIKE do MySQL, você vai pesquisar na coluna de tags e depois vai dar um explode pra dividir cada tag dentro de uma array. Aí usa o array_search pra exibir o resultado final.

 

Exemplificando melhor, ficaria algo mais ou menos assim: fiz uma postagem com as tags verde,amarelo,azul (separe apenas com vírgulas, sem espaços pra facilitar a busca depois). Digamos que o caminho dessa postagem seja http://www.postagem.com.br/cores. No meu banco de dados eu tenho, então, os seguintes dados:

 

POST CAMINHO TAGS

As Cores http://www.postagem.com.br/cores verde,amarelo,azul

 

>> USANDO O MÉTODO DO LIKE (o mais indicado e mais simples) <<

Simples. Receba o form com o que o cidadão quer pesquisar e faça uma pesquisa no mysql com esses dados. A exemplo, digamos que o campo do form onde a pessoa digita o que quer buscar, se chame pesquisa. Ao receber a string $pesquisa, vamos pesquisar no mysql assim: mysql_query(SELECT * FROM '$tabela' WHERE 'tags' LIKE '%$pesquisa%');

 

Pronto, sempre que o que a pessoa digitar for igual a alguma das tags definidas, o resultado será obtido. Para exibir o resultado, faça da forma como preferir. O mais simples é armazenar o resultado desse SELECT numa string e formatar da forma que preferir pra exibir depois.

 

>> USANDO O MÉTODO DA ARRAY <<

Sendo assim, quando eu for fazer a pesquisa no mysql, terei 3 strings. Uma com o título da postagem, outra com o endereço dela e outra com as tags. Quando eu recuperar a string com as tags, depois de fazer o loop no DB, eu vou ter uma string em formato de texto, com este conteúdo: verde,amarelo,azul. Mas pra funcionar direito, preciso separar cada uma das tags, então faço isso:

$tags = explode($tags,",");

Agora tenho uma array com cada tag separada já, tudo organizado, além das outras strings já prontas pra uso. Quando o cidadão pesquisar alguma coisa no meu site, eu vou ter um script que vai receber o que ele digitou na pesquisa e vou comparar o resultado com o da minha array que contém as minhas tags. Pra fazer isso, temos o seguinte: a pesquisa do cidadão tem que ser dividida em palavras. Cada palavra será um registro dentro de uma array, pra que possamos comparar com a array que possui as tags. Fazemos o seguinte: Quando o que o cidadão digitou for recebido, usaremos um explode pra separar palavra por palavra também:

$pesquisa = explode($_POST["pesquisa"]," ");

Com isso, cada espaço em branco no que foi digitado representará que uma nova palavra foi digitada, separando cada uma em um novo registro da array.

 

Para comparar a pesquisa com as tags, faremos um loop dentro das arrays. Simplesmente utilize um count(); pra ver quantos registros há em cada array e depois um for() pra fazer um loop comparativo nelas. Assim:

$registros = count($tags); // o número de registros na array
$pesquisados = count($pesquisa); // o número de palavras usadas na pesquisa

if($registros > $pesquisados){$loops = $registros}else{$loops = $pesquisados}

$i = 0; // Serve apenas para controlar o fluxo do loop
$exibir = 0; //O número cresce a cada tag correspondente encontrada
while($i < $loops){
   if(in_array($pesquisa[$i],$tags[$i])){
     $exibir++;
   }
  $i++;
}

// Agora checamos se a pesquisa encontrou alguma tag correspondente
if($exibir > 0){
   // Se algum registro for encontrado, faça-o ser exibido da forma que preferir
} else {
  // Aqui coloca o código do que acontece caso a pesquisa não gere nenhum resultado
}

 

Digitei com pressa, to no trabalho. Qualquer coisa fala aí que a gente vai ajeitando os códigos. Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, não está perfeito é o que tinha na vídeo aula que o Duarte indicou, mas agora consegui capturar o modo de como fazer com as tags corretamente.

 

Só preciso esclarecer uma dúvida que sempre tive o MySql filtra resultados semelhantes como ex:

caixas

caichas

 

Dai estão finalizadas minhas dúvidas no momento, obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem uma função nativa do php chamada levenshtein, com ela você compara a palavra digitada com que esta no banco, desde que esteja em um array, tipo o que você quiz dizer do google.

 

Aqui tem um exemplo básico de uso

 

http://imasters.com.br/artigo/11364/

 

No manual também tem diversos exemplos:

 

<?php 
    function wordMatch($words, $input, $sensitivity){ 
        $shortest = -1; 
        foreach ($words as $word) { 
            $lev = levenshtein($input, $word); 
            if ($lev == 0) { 
                $closest = $word; 
                $shortest = 0; 
                break; 
            } 
            if ($lev <= $shortest || $shortest < 0) { 
                $closest  = $word; 
                $shortest = $lev; 
            } 
        } 
        if($shortest <= $sensitivity){ 
            return $closest; 
        } else { 
            return 0; 
        } 
    } 

    $word = 'caicha'; 

    $words  = array('apple','pineapple','caixa','banana','orange', 
                    'radish','carrot','pea','bean','potato'); 
                    
    echo wordMatch($words, strtolower($word), 2); 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah tá entendi a espécia de dicionário php onde se aplica noções diferentes as palavras criando a classe sensitivity, que faz o tratamento.

 

E aplico isso no tratamento da palavra que o utilizador do site pesquisar na comparação as keywords do site ques está do db, ai é só retornar os resultados da forma que acha melhor e estilizar do jeito que quiser.

 

Obrigado Duarte e Diego.

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.