66 votes

Comment mettre en œuvre la fonctionnalité de recherche dans un site web ?

Je souhaite mettre en place une fonctionnalité de recherche pour un site Web (en supposant qu'il soit similaire à SO). Je ne veux pas utiliser la recherche Google ou ce genre de choses.

Ma question est la suivante :

Comment puis-je mettre cela en œuvre ?

Il existe deux méthodes que je connais :

  1. Recherche dans toutes les bases de données de l'application lorsque l'utilisateur donne sa requête.
  2. Indexer toutes les données dont je dispose, les stocker ailleurs et les interroger à partir de là (comme le fait Google).

Quelqu'un peut-il me dire quelle direction prendre ? Quels sont les avantages et les inconvénients ?

Y a-t-il de meilleures façons de faire ?

36voto

paan Points 3075

Utilisez lucene,
http://lucene.apache.org/java/docs/

Apache Lucene est une bibliothèque de moteur de recherche de texte très performante et complète, entièrement écrite en Java. Il s'agit d'une technologie adaptée à presque toutes les applications qui nécessitent une recherche plein texte, en particulier les applications multiplateformes.

Il est disponible en java et en .net. Il est également disponible en php sous la forme d'un module zend framework.

Lucene fait ce que vous voulez (indexation des éléments recherchés), vous devez garder la trace d'un index lucene mais c'est beaucoup mieux que de faire une recherche dans une base de données en termes de performance. D'ailleurs, la recherche SO est alimentée par Lucene :D

34voto

Peter Hoffmann Points 13823

Cela dépend de l'étendue de votre site web et de la part que vous souhaitez prendre en charge vous-même.

Si vous exécutez un petit site web sans autres possibilités d'ajouter une recherche personnalisée, laisser google faire le travail (peut-être ajouter une plan de site ) et utiliser le recherche personnalisée google .

Si vous exécutez un site moyen avec un moteur sql, utilisez les fonctions de recherche de votre moteur sql.

Si vous exécutez des une pile de logiciels plus lourde comme J2EE ou .Net utilisent Lucene un grand et puissant moteur de recherche ou son clone .Net. lucene.net

Si vous voulez abstraire votre recherche de votre application et être en mesure de l'interroger dans une langue neutre avec les API XML/HTTP et JSON, jetez un oeil à solr . Solr exécute lucene en arrière-plan, mais y ajoute une interface web agréable.

4voto

Greg Hewgill Points 356191

Vous voudrez peut-être jeter un coup d'œil à xapian et le oméga front-end. Il s'agit essentiellement d'une boîte à outils sur laquelle vous pouvez construire une fonctionnalité de recherche.

1voto

Matt Sheppard Points 32256

La meilleure façon d'aborder cette question dépend de la manière dont vous construisez vos pages.

Si elles sont fréquemment composées d'un grand nombre d'enregistrements différents (comme c'est le cas, j'imagine, des pages de stack overflow), l'approche de l'indexation est susceptible de donner de meilleurs résultats, à moins que vous ne mettiez beaucoup d'efforts à reconstruire efficacement les pages du côté de la base de données.

L'inconvénient de l'approche par indexation est le délai d'exécution. Il existe des solutions de contournement (comme le sitemap de Google), mais elles sont également complexes à mettre en œuvre.

Si vous optez pour le chemin de la base de données, sachez également que les systèmes de moteurs de recherche modernes fonctionnent beaucoup mieux s'ils ont des données de liens à traiter, et qu'un système capable de comprendre les liens entre les "pages" de la base de données aura un effet positif.

1voto

Johannes Points 1216

Si vous êtes sur la plateforme Microsoft, vous pouvez utiliser le service d'indexation. Il s'intègre très facilement aux sites web IIS.

Il dispose de toutes les fonctionnalités de base comme la recherche plein texte, le classement, l'exclusion et l'inclusion de certains types de fichiers et vous pouvez également ajouter vos propres méta-informations via les balises méta dans les pages html.

Faites une recherche sur Google et vous en trouverez des tonnes !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X