Domanda

Vorrei eseguire una ricerca full-text dei dati nella mia applicazione Ruby on Rails.Quali opzioni esistono?

È stato utile?

Soluzione

Sono disponibili diverse opzioni e ciascuna presenta punti di forza e di debolezza diversi.Se desideri aggiungere la ricerca del testo completo, sarebbe prudente esaminarli un po' e provarli per vedere come funzionano per te nel tuo ambiente.

MySQL dispone del supporto integrato per la ricerca full-text.Dispone di supporto online, il che significa che quando nuovi record vengono aggiunti al database, vengono automaticamente indicizzati e saranno disponibili nei risultati della ricerca.IL documentazione ha più dettagli.

acts_as_tsearch offre un wrapper per funzionalità integrate simili per le versioni recenti di PostgreSQL

Per altri database dovrai utilizzare altri software.

Lucene è un popolare provider di ricerca scritto in Java.Puoi utilizzare Lucene tramite il suo server di ricerca Sol con Rails utilizzando acts_as_solr.

Se non vuoi usare Java, c'è un porto da Lucene a Ruby chiamato Furetto.Il supporto per Rails viene aggiunto utilizzando acts_as_ferret collegare.

Xapian è un'altra buona opzione ed è supportata in Rails utilizzando il file acts_as_xapian collegare.

Infine, la mia scelta preferita è Sfinge usando il Ultrasfinge collegare.È estremamente veloce e ha molte opzioni su come indicizzare e cercare nei database, ma non viene più mantenuto attivamente.

Un altro plugin per Sphinx è Sfinge pensante che ha molti aspetti positivi feedback.È un po' più semplice iniziare a utilizzare Thinking Sphinx che Ultrasphinx.Suggerirei di esaminare entrambi i plugin per determinare quale si adatta meglio al tuo progetto.

Altri suggerimenti

Posso consigliare Sfinge.Ryan Bates ha un grande screencast sull'utilizzo del plugin Thinking Sphinx per creare una soluzione di ricerca full-text.

Puoi usare Ferret (che è Lucene scritto in Ruby).Si integra perfettamente con Rails utilizzando il mixin act_as_ferret.Dare un'occhiata a "Come integrare Ferret con Rails".Un'alternativa è Sfinge.

Ho compilato un elenco delle varie opzioni di ricerca di Ruby on Rails in quest'altra domanda.Non sono sicuro di come o se combinare le nostre domande.

Dipende da quale database stai utilizzando.Consiglierei di utilizzare Solr poiché offre molte opzioni interessanti.Lo svantaggio è che devi eseguire un processo separato per questo.Ho utilizzato anche Ferret, ma l'ho trovato meno stabile in termini di accesso multi-thread all'indice.Non ho provato Sphinx perché funziona solo con MySQL e Postgres.

Solo una nota per riferimento futuro:L'Ultra Sfinge non viene più mantenuta.La sfinge pensante è il suo sostituto.Anche se al momento mancano diverse funzionalità, come l'estratto di quale aveva Ultra Sfinge, lo compensa con altre funzionalità.

Consiglierei act_as_ferret poiché lo sto utilizzando per il progetto Scrumpad al lavoro.L'indicizzazione può essere eseguita come un processo separato che garantisce che durante la reindicizzazione possiamo ancora utilizzare la nostra applicazione.Ciò può ridurre i tempi di inattività del sito web.Inoltre la ricerca è molto più veloce.Puoi cercare tra più modelli alla volta e ordinare i risultati in base ai campi che preferisci.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top