2010-11-29 29 views
1

J'ai besoin d'un moteur de recherche pour un site web que je construis. J'ai décidé d'essayer le mien en utilisant php et mysql. Actuellement, il semble que les options viables consistent à créer trois tables.php, mysql chercher le site

Un pour les mots, un pour les pages et un tableau de référence. Puis, lorsque j'insère un nouvel article, je scanne le texte et place les mots séparés dans la table des mots et je fais référence à ces mots sur la troisième table.

À la fin, lorsqu'une recherche est effectuée. Le script doit retourner les pages avec les mots les plus indexés pour un mot donné.

Cependant, il semble que cette approche ne peut retourner des résultats qu'en fonction du nombre de mots-clés. Plus un mot-clé est utilisé dans un article, plus il apparaît sur la page de résultats. Ainsi, un article avec moins de mots-clés peut-être plus lié à la recherche, mais sera placé plus bas sur les résultats.

La question serait là est une meilleure façon de créer un moteur de recherche personnalisé en utilisant php/mysql? Aussi, si vous n'avez pas accès au serveur pour installer des moteurs de recherche comme Sphinx, quelle est la meilleure façon de résoudre ce problème?

Répondre

2

J'ai construit un moteur de recherche de la même manière, mais j'ai construit une table croisée, reliant chaque mot à chaque page dans laquelle il s'est produit. Dans cette table, j'ai également stocké le nombre de fois que le mot est apparu dans la page par rapport à la longueur de la page. J'ai calculé si vous voulez, le pourcentage des mots sur la page qui étaient ce mot. Il est donc plus facile d'appliquer un poids à votre résultat de recherche. Mais malheureusement, il est difficile de déterminer si une page est plus pertinente à d'autres égards. Google utilise quelques astuces comme la distance entre deux mots-clés sur une page. Si elles sont proches les unes des autres, elles sont probablement liées. Si un mot clé est plus haut dans la page, c'est probablement plus important, et ainsi de suite.

Mais Google utilise également une structure de base de données totalement différente, mieux adaptée à ce type de requêtes. Il peut être difficile de construire cela dans MySQL.

Vous pouvez essayer si l'indexation FullText de MySQL vous est utile. Il indexe vos pages et vous pouvez effectuer une requête en utilisant MATCH qui renvoie un score pour chaque ligne. Je ne sais pas exactement quelles sont les formules utilisées ici, mais cela semble assez intelligent.

Si toutes vos pages sont publiques, vous pouvez envisager d'utiliser Google Custom Search ou quelque chose comme ça. Cela vous fera gagner beaucoup de temps.

1

Comme d'autres l'ont suggéré, ne pas rouler votre propre; SQL n'est pas bon pour la recherche. Nous utilisons un système basé sur Solr utilisant la bibliothèque Solr PHP Client. Vous obtiendrez de meilleures performances, un support pour des requêtes booléennes beaucoup plus puissantes (par exemple, ET ET (ceci OU cela), etc.), en recherchant dans des documents (pdfs, word, xls, etc.) via Tika et ainsi de suite.

Si vous voulez explorer votre propre site web, vous pouvez également regarder dans nutch.

0

I Deuxième El Yobo, si vous allez pour un moteur de recherche complet soufflé, vous aurez plus de chance avec les clients Lucene mais si vous cherchez un cse google solution rapide est le meilleur .