web-dev-qa-db-fra.com

Moteur de recherche similaire à Google en PHP/MySQL

Nous avons compilé des milliers de pages d'articles de journaux. Le journal, le numéro, la date, le numéro de page et le texte OCRed de chaque page ont été placés dans une base de données mySQL. 

Nous souhaitons maintenant créer un moteur de recherche semblable à celui de Google dans PHP pour trouver les pages auxquelles une requête a été adressée. Cela doit être rapide et ne prend pas plus d'une seconde pour une recherche. 

Comment devrions-nous le faire?

23
lkessler

Vous pouvez également essayer SphinxSearch . Craigslist utilise sphinx et peut se connecter à la fois à MySQL et à PostGresql.

15
cnu

Si la recherche en texte intégral de MySQL prend 20 secondes par requête, vous l’avez soit mal configurée, soit exécutée sur du matériel sous-alimenté - certains big sites utilisent avec succès la vieille recherche MyISAM.

Mon vote va pour Solr , cependant. Il est basé sur Lucene, vous obtenez ainsi toute la richesse et les performances de ce produit haut de gamme, mais avec une API RESTful, ce qui le rend très facilement de PHP . Il y a même un article dW .

10
James Brady

Il existe des moteurs de recherche intéressants que vous pouvez consulter. Je ne sais pas ce que vous entendez par "Google like", alors je vais simplement ignorer cette partie.

  • Jetez un coup d'œil au moteur Lucene . L'original est très performant mais écrit en Java. Il y a un port de Lucene à PHP (déjà mentionné ailleurs) mais il est trop lent.
  • Examinez attentivement le projet Xapian . C'est rapide. Il est écrit en C++, vous devrez donc probablement le construire pour votre (vos) serveur (s) cible (s), mais avec des liaisons PHP.
10
Glenn

Vous pouvez placer tous les fichiers dans Google Documents, puis transférer les résultats sur votre propre site Web.

Ce qui me préoccupe, c’est que la précision de la reconnaissance optique des caractères est toujours un problème. Par conséquent, la capacité à effectuer des recherches "floues" est un critère à prendre en compte pour une exigence de recherche. Signification floue lorsque l'OCR reconnaît de manière incorrecte le mot "hat" pour "hot", le moteur de recherche sera suffisamment intelligent pour renvoyer des résultats similaires mais non exacts. Dans Oracle, une fonction appelée UTL_MATCH compare la similarité entre deux chaînes: http://docs.Oracle.com/cd/E11882_01/appdev.112/e25788/u_match.htm#ARPLS352

Une fonction comme celle-ci serait utile.

4
Sun

Pourquoi n'essayez-vous pas quelque chose comme Google Search Appliance ou Google Enterprise? Cela aura un coût associé, mais cela vous évitera de réinventer la roue et vous donnera une recherche de type "google like".

2
Pradeep

Votre scénario suggère, que vous voudriez rouler le vôtre; Un bon point de départ pour un moteur de recherche général comprendrait:

Si vous souhaitez utiliser une solution sur étagère:

2
Silver Dragon

Vérifiez ceci Lucene port pour PHP:

1
CMS

Vous voudrez peut-être vérifier Sphider . D'après mon expérience, il est assez rapide et l'indexation automatique. Il est également open source afin que vous puissiez prendre le code et le modifier selon vos besoins.

1
Darryl Hein

sqlite a une assez bonne capacité de recherche en texte intégral (recherchez sqlite FTS 3/4 - son étonnamment bon)

si vous voulez une simple PHP approche de bricolage, l'indexation utilisant beaucoup de petits fichiers divisés par un hachage des termes indexés peut très bien fonctionner. La recherche AMD peut être très rapide même en php si vous prenez soin de la concevoir . (L'idée est de faire une recherche sur un terme. Il suffit de chercher dans un très petit fichier contenant les termes correspondant au hachage et aux identifiants d'enregistrement. Vous pouvez utiliser des tranches bitarray pour représenter les identifiants d'enregistrement si vous souhaitez économiser de l'espace HD. ) .. mais l'indexation de chaque mot pour le texte intégral serait lente en php .. cette partie devrait vraiment être faite en c

pour les recherches "Fuzzy", utilisez peut-être un hachage métaphone.

pour les outils en texte intégral prédéfinis, vérifiez les éléments suivants: sqlite FTS 3/4 (sqlite offre une très bonne capacité de recherche en texte intégral!), Sphinx, kinoSearch ( kinoSearch est un peu comme Lucene mais le back-end est c avec un joli wrapper Perl facile - il y a aussi cLucene mais je pense que c'est toujours pré-alpha) 

Java Lucene (ou tout ce qui est basé sur Java) a probablement besoin de beaucoup de mémoire vive pour être mis de côté pour exécuter une machine virtuelle Java - donc probablement pas si génial si votre budget

0
Michael MD