Question

Je souhaite effectuer une recherche en texte intégral des données dans mon application Ruby on Rails.Quelles options existent ?

Était-ce utile?

La solution

Il existe plusieurs options disponibles et chacune présente des forces et des faiblesses différentes.Si vous souhaitez ajouter une recherche en texte intégral, il serait prudent d'étudier chacun un peu et de les essayer pour voir dans quelle mesure cela fonctionne pour vous dans votre environnement.

MySQL prend en charge la recherche en texte intégral.Il dispose d'un support en ligne, ce qui signifie que lorsque de nouveaux enregistrements sont ajoutés à la base de données, ils sont automatiquement indexés et seront disponibles dans les résultats de recherche.Le Documentation a plus de détails.

acts_as_tsearch propose un wrapper pour des fonctionnalités intégrées similaires pour les versions récentes de PostgreSQL

Pour les autres bases de données, vous devrez utiliser d'autres logiciels.

Lucène est un moteur de recherche populaire écrit en Java.Vous pouvez utiliser Lucene via son serveur de recherche Solr avec Rails utilisant acts_as_solr.

Si vous ne souhaitez pas utiliser Java, il existe un portage de Lucene vers Ruby appelé Furet.La prise en charge de Rails est ajoutée à l'aide du acts_as_ferret brancher.

Xapian est une autre bonne option et est pris en charge dans Rails en utilisant le acts_as_xapian brancher.

Enfin, mon choix préféré est Sphinx en utilisant le Ultrasphinx brancher.Il est extrêmement rapide et propose de nombreuses options sur la façon d'indexer et de rechercher vos bases de données, mais n'est plus activement maintenu.

Un autre plugin pour Sphinx est Sphinx pensant ce qui a beaucoup de positif retour.Il est un peu plus facile de commencer à utiliser Thinking Sphinx qu'Ultrasphinx.Je suggérerais d'étudier les deux plugins pour déterminer lequel correspond le mieux à votre projet.

Autres conseils

Je peux recommander Sphinx.Ryan Bates a un super capture d'écran sur l'utilisation du plugin Thinking Sphinx pour créer une solution de recherche en texte intégral.

Vous pouvez utiliser Ferret (qui est Lucene écrit en Ruby).Il s'intègre parfaitement à Rails en utilisant le mixin actes_as_ferret.Jeter un coup d'œil à "Comment intégrer le furet aux rails".Une alternative est Sphinx.

J'ai compilé un liste des différentes options de recherche Ruby on Rails dans cette autre question.Je ne sais pas comment ni si combiner nos questions.

Cela dépend de la base de données que vous utilisez.Je recommanderais d'utiliser Solr car il offre de nombreuses options intéressantes.L'inconvénient est que vous devez exécuter un processus distinct pour cela.J'ai également utilisé Ferret, mais je l'ai trouvé moins stable en termes d'accès multithread à l'index.Je n'ai pas essayé Sphinx car il ne fonctionne qu'avec MySQL et Postgres.

Juste une note pour référence future :Ultra Sphinx n'est plus maintenu.Le Sphinx pensant est son remplaçant.Bien qu'il lui manque plusieurs fonctionnalités à l'heure actuelle, comme l'extraction d'Ultra sphinx, il le compense par d'autres fonctionnalités.

Je recommanderais actes_as_ferret car je l'utilise pour le projet Scrumpad au travail.L'indexation peut être effectuée en tant que processus distinct, ce qui garantit que lors de la réindexation, nous pouvons toujours utiliser notre application.Cela peut réduire les temps d’arrêt du site Web.De plus, la recherche est beaucoup plus rapide.Vous pouvez effectuer une recherche dans plusieurs modèles à la fois et trier vos résultats selon les champs que vous préférez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top