2010-01-31 12 views
10

Sto scrivendo la mia prima applicazione Ruby on Rails e ho bisogno di implementare una funzione di "ricerca". Dovrà cercare nel database (1 colonna per tabella in 3 diverse tabelle) e restituire i risultati più pertinenti in ciascuna delle 3 categorie. Un po 'come come si può fare una ricerca su Amazon.com che restituirà risultati da tutti i diversi reparti.Implementazione della ricerca in un'applicazione Ruby on Rails 3?

C'è una gemma/libreria/tecnica comune nel mondo di Ruby on Rails che dovrei sapere (che funziona con Rails 3)? Altrimenti, cosa devo fare per implementare una funzione di ricerca nella mia applicazione?

risposta

2

Probabilmente avresti bisogno di usare un motore di ricerca. Dai uno sguardo al plugin thinking sphinx. Ho anche usato acts_as_ferret ma può causare alcuni problemi.

Non so se c'è un plugin che fa tutto quello che vuoi per te. Vorrei fare in questo modo:

  1. implementare la ricerca (con SQL o con qualche motore di ricerca come Sfinge etc.)
  2. Quindi aggiungere alcune cose Ajax per il completamento automatico.

Google è il tuo amico: take a look here e here.

4

Penso che dipenda da quanto "serio" si tratti della ricerca.

Se si desidera eseguire la ricerca in alcuni semplici campi VARCHAR, che si dovrebbero eseguire manualmente generando alcune istruzioni "LIKE '% xyz%'", tutto ciò che serve è un plug-in che faccia ciò per te. Il mio preferito qui è searchlogic. Abilita alcuni utili oscilloscopi dinamici nei tuoi modelli, che puoi concatenare insieme (come altri ambiti). Per esempio è possibile scrivere qualcosa del genere:

User.last_name_like("Doe").age_gt(30).age_lt(40) 

Ecco un great screencast su come utilizzare le sue altre caratteristiche.

Ma l'istruzione SQL LIKE non è particolarmente adatta per la ricerca in grossi blocchi di testo. Quindi, se è quello che ti serve, starai meglio usando un plugin che indicizza effettivamente i tuoi dati.

In tal caso thinking sphinx (menzionato in altre risposte) è un'ottima soluzione. Tieni presente che richiede alcune fasi di installazione specifiche della piattaforma e funziona solo con PostreSQL e MySQL (non funziona con SQLite predefinito di Rails). Anche l'utilizzo non è così semplice: è necessario definire cosa indicizzare su ogni modello che si desidera cercare, creare l'indice, avviare Sphinx, ecc.