Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como eu implementaria uma pesquisa de site simples com php e mySQL?


Todo mundo está sugerindo a pesquisa de texto completo do MySQL, no entanto, você deve estar ciente de uma grande ressalva. O mecanismo de pesquisa Fulltext está disponível apenas para o mecanismo MyISAM (não InnoDB, que é o mecanismo mais usado devido à sua integridade referencial e conformidade com ACID).

Então você tem algumas opções:

1. A abordagem mais simples é descrita por Particle Tree . Você pode realmente obter pesquisas classificadas a partir de SQL puro (sem texto completo, sem nada). A consulta SQL abaixo pesquisará uma tabela e classificará os resultados com base no número de ocorrências de uma string nos campos de pesquisa:
SELECT
    SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) +
        ((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6))
    AS Occurrences
FROM
    posts AS p
GROUP BY
    p.id
ORDER BY
    Occurrences DESC

editou o exemplo para fornecer um pouco mais de clareza

Variações na consulta SQL acima, adicionando instruções WHERE (WHERE p.body LIKE '%whatever%you%want'), etc., provavelmente, obterão exatamente o que você precisa.

2. Você pode alterar seu esquema de banco de dados para oferecer suporte a texto completo. Muitas vezes, o que é feito para manter a integridade referencial do InnoDB, conformidade com ACID e velocidade sem ter que instalar plugins como Sphinx Fulltext Search Engine para MySQL é dividir os dados de cotação em sua própria tabela. Basicamente você teria uma tabela Quotes que é uma tabela InnoDB que, ao invés de ter seu campo TEXT "data" você tem uma referência "quote_data_id" que aponta para o ID em uma tabela Quote_Data que é uma tabela MyISAM. Você pode fazer seu texto completo na tabela MyISAM, juntar os IDs retornados com suas tabelas InnoDB e voila você tem seus resultados.

3. Instale o Sphinx . Boa sorte com este.

Dado o que você descreveu, eu ALTAMENTE recomendo que você adote a primeira abordagem que apresentei, pois você tem um site simples baseado em banco de dados. A primeira solução é simples, faz o trabalho rapidamente. O Lucene será uma merda para configurar, especialmente se você quiser integrá-lo ao banco de dados, pois o Lucene foi projetado principalmente para indexar arquivos e não bancos de dados. A pesquisa de site personalizada do Google apenas faz com que seu site perca toneladas de reputação (faz você parecer amador e hackeado), e o texto completo do MySQL provavelmente fará com que você altere seu esquema de banco de dados.