Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment implémenterais-je une recherche de site simple avec php et mySQL ?

Tout le monde suggère la recherche en texte intégral MySQL, mais vous devez être conscient d'une énorme mise en garde. Le moteur de recherche Fulltext n'est disponible que pour le moteur MyISAM (pas InnoDB, qui est le moteur le plus couramment utilisé en raison de son intégrité référentielle et de sa conformité ACID).

Vous avez donc plusieurs options :

1. L'approche la plus simple est décrite par Particle Tree . Vous pouvez réellement obtenir des recherches classées à partir de SQL pur (pas de texte intégral, rien). La requête SQL ci-dessous effectuera une recherche dans une table et classera les résultats en fonction du nombre d'occurrences d'une chaîne dans les champs de recherche :

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

modifié leur exemple pour fournir un peu plus de clarté

Des variations sur la requête SQL ci-dessus, l'ajout d'instructions WHERE (WHERE p.body LIKE '%whatever%you%want'), etc. vous permettront probablement d'obtenir exactement ce dont vous avez besoin.

2. Vous pouvez modifier le schéma de votre base de données pour prendre en charge le texte intégral. Souvent, ce qui est fait pour maintenir l'intégrité référentielle InnoDB, la conformité ACID et la vitesse sans avoir à installer des plugins comme Sphinx Fulltext Search Engine pour MySQL consiste à diviser les données de devis dans sa propre table. Fondamentalement, vous auriez une table Quotes qui est une table InnoDB qui, plutôt que d'avoir votre champ TEXT "data", vous avez une référence "quote_data_id" qui pointe vers l'ID sur une table Quote_Data qui est une table MyISAM. Vous pouvez faire votre texte intégral sur la table MyISAM, joindre les identifiants retournés avec vos tables InnoDB et le tour est joué vous avez vos résultats.

3. Installez Sphinx . Bonne chance avec celui-ci.

Compte tenu de ce que vous avez décrit, je voudrais FORTEMENT vous recommandons de prendre la 1ère approche que j'ai présentée puisque vous avez un site basé sur une base de données simple. La 1ère solution est simple, fait le travail rapidement. Lucene sera une chienne à configurer, surtout si vous souhaitez l'intégrer à la base de données, car Lucene est principalement conçu pour indexer des fichiers et non des bases de données. La recherche de site personnalisée Google fait simplement perdre à votre site des tonnes de réputation (vous donne l'air amateur et piraté), et le texte intégral MySQL vous fera très probablement modifier le schéma de votre base de données.