2010-09-24 4 views
0

J'ai un site (construit en PHP) où j'ai environ un million d'enregistrements dans une table mysql. Il y a une recherche "avancée" très complexe qui permet de rechercher, trier et ordonner les données de centaines, voire de milliers de façons différentes.Vous voulez remplacer fulltext, et% foo% rechercher avec quelque chose de mieux (et plus rapide)

Malheureusement, la recherche mysql n'est pas très bonne, et elle est extrêmement lente. La recherche moyenne prend actuellement 5 secondes, et la seule façon de faire fonctionner le site est de mettre en cache toutes les recherches pendant une semaine (il y a plus de 1,1 million de fichiers cache juste pour les recherches actuellement). J'ai "ghetto fuzzy search" que j'implémente via la fonction soundex().

Je voulais voir ce que je peux faire pour remplacer la recherche mysql par quelque chose d'un peu plus rapide, et quelque chose qui donnerait des résultats précis. J'ai aussi besoin que la sortie soit totalement skinnable, car la page de résultats n'est pas seulement du texte, mais des images et des css complexes. J'ai regardé sphinx, mais il n'y a pas de recherche floue là-bas, que j'aimerais beaucoup avoir.

+0

La recherche de texte intégral est optimale pour la recherche de texte. Il n'est pas clair pour moi si vous utilisez 'WITH QUERY EXPANSION' dans la syntaxe MATCH AGAINST native de MySQL pour la recherche floue ... –

+0

Il retourne beaucoup de données totalement non pertinentes. Parfois, avec une correspondance exacte n'étant pas n ° 1, et je commande par pertinence. –

Répondre

0

SQL n'est pas conçu pour les types de requêtes que vous effectuez, certainement pas à l'échelle. Ma recommandation serait la suivante:

Indexez toutes vos tables dans un index Apache Solr. Solr est un serveur de recherche FOSS construit en utilisant Lucene et peut facilement interroger l'index en millisecondes ou moins. Il supporte à peu près tout type de requête dont vous avez besoin: flou, caractère générique, proximité, etc.

Depuis Solr offre une API RESTful (HTTP) devrait facilement s'intégrer dans quelle que soit la plate-forme que vous utilisez.

Questions connexes