Comment dois-je faire la recherche de texte intégral dans Ruby on Rails?

voix
10

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

Créé 06/09/2008 à 17:51
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
19

Il y a plusieurs options disponibles et ont chacun différentes forces et faiblesses. Si vous souhaitez ajouter la recherche en texte intégral, il serait prudent d'enquêter sur chacun un peu et les essayer pour voir comment cela fonctionne pour vous dans votre environnement.

MySQL a un support intégré pour la recherche en texte intégral. Il a 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. La documentation a plus de détails.

acts_as_tsearchoffre une enveloppe pour la même fonctionnalité intégrée pour les versions récentes de PostgreSQL

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

Lucene est un moteur de recherche populaire écrit en Java. Vous pouvez utiliser Lucene par son serveur de recherche Solr avec Rails à l' aide acts_as_solr.

Si vous ne souhaitez pas utiliser Java, il y a un port de Lucene à Ruby appelé Ferret . Prise en charge de Rails est ajouté à l' aide du acts_as_ferretplug - in.

Xapian est une autre option et est prise en charge dans Rails à l' aide du acts_as_xapianplug - in.

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

Un autre plug - in pour Sphinx est Thinking Sphinx qui a beaucoup de positif commentaires . Il est un peu plus facile de commencer à utiliser Thinking Sphinx que Ultrasphinx. Je suggère enquêter sur les deux plugins pour déterminer qui correspond mieux à votre projet.

Créé 06/09/2008 à 18:18
source utilisateur

voix
6

Je peux recommander Sphinx. Ryan Bates a un grand screencast sur l' utilisation du plug - in Thinking Sphinx pour créer une solution de recherche en texte intégral.

Créé 06/09/2008 à 18:04
source utilisateur

voix
5

Vous pouvez utiliser Ferret (qui est Lucene écrit en Ruby). Il intègre sans couture avec Rails en utilisant le mixin acts_as_ferret. Jetez un oeil à « Comment intégrer Ferret avec Rails ». Une alternative est Sphinx .

Créé 06/09/2008 à 17:55
source utilisateur

voix
1

Je recommande acts_as_ferret que je l'utilise pour le projet Scrumpad au travail. L'indexation peut être fait comme un processus distinct qui garantit que tout réindexation nous pouvons encore utiliser notre application. Cela peut réduire le temps d'arrêt du site. Aussi la recherche est beaucoup plus rapide. Vous pouvez effectuer une recherche par modèle multiple à la fois et avez vos résultats triés par les champs que vous préférez.

Créé 29/08/2009 à 18:27
source utilisateur

voix
1

Juste une petite note pour référence future: Ultra Sphinx n'est plus maintenu. Penser est sphynx son remplacement. Bien qu'il manque plusieurs fonctionnalités à ce moment comme Ultra qui extrayant sphynx avait, il se rattrape dans d'autres fonctions.

Créé 11/03/2009 à 14:04
source utilisateur

voix
1

Cela dépend de ce que la base de données que vous utilisez. Je recommanderais d'utiliser Solr car il offre beaucoup d'options sympathiques. L'inconvénient est que vous devez exécuter un processus séparé pour elle. Je l'ai utilisé Ferret aussi bien, mais il lui est moins stable en termes d'accès multithread à l'index. Je ne l'ai pas essayé Sphinx, car il fonctionne uniquement avec MySQL et Postgres.

Créé 23/09/2008 à 15:21
source utilisateur

voix
1

J'ai la compilation d' une liste des différentes options de recherche Ruby on Rails dans cette autre question . Je ne sais pas comment, ou si de combiner nos questions.

Créé 16/09/2008 à 19:33
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more