Domanda

Esistono diverse opzioni di plug-in per creare un motore di ricerca nella tua applicazione Ruby on Rails.Quale di questi è il migliore?

È stato utile?

Soluzione

Thinking Sphinx ha una sintassi più concisa per definire quali campi e quali modelli sono indicizzati.

Sia UltraSphinx che Thinking Sphinx (recentemente) hanno funzionalità ultra interessanti che tengono conto della vicinanza geografica degli oggetti.

UltraSphinx ha fastidiosi problemi con il modo in cui carica i modelli (non carica l'intero stack Rails, quindi potresti diventare strano e difficile da diagnosticare errori, che vengono gestiti aggiungendo espliciti require dichiarazioni).

Utilizziamo Thinking Sphinx su nuovi progetti e UltraSphinx su progetti che utilizzano contenuti geografici.

Altri suggerimenti

Questa domanda è stata posta in precedenza Qui con risposte più dettagliate.

Un'opzione solida utilizzata da uno dei miei amici è Sol, un motore di ricerca che utilizza Lucene originale basato su Java.Per usarlo con Rails, c'è ovviamente un plugin act_as, agisce_come_solr.

Ha presentato la combinazione recentemente a Montreal sulle rotaie e fornisce una panoramica piacevole e approfondita di come utilizzare act_as_solr sul suo blog.

Apparentemente supporta molto bene anche gli accenti francesi.

Sto seguendo esattamente questo processo proprio adesso, quindi anche se non ho esperienza reale, ho passato molte ore a ricercare tutte le opzioni.Ecco cosa ho imparato finora:

  • *Sphinx: buona reputazione per velocità e funzionalità, ma Sphinx necessita di chiavi intere e il mio modello utilizza il GUID;ThinkingSphinx ha recentemente annunciato il supporto per GeoSpatial
  • Acts_As_Solr - consigliato da un amico con un sito ad alto volume;i creatori originali hanno smesso di lavorarci e la documentazione è difficile da trovare;richiede un servlet Java
  • Acts_As_Ferret - sembra facile da usare, ma molti detrattori dicono che è instabile
  • Altri due con informazioni limitate sono Acts_As_Indexed e Acts_As_Searchable

Ho un foglio di calcolo con il mio tentativo di documentare i vantaggi e gli svantaggi di tutti loro.Se qualcuno è interessato a vederlo e/o aiutarmi a correggerlo, mi contatti.Lo pubblicherò da qualche parte una volta che avrò la certezza che sia accurato.

Il mio consiglio sarebbe di provare UltraSphinx o Thinking Sphinx se disponi di chiavi primarie normali.Proverò Acts_As_Xapian in base alla buona documentazione, al set di funzionalità e a quanto sembra essere attivo il progetto.

Ho utilizzato solo la combinazione Ferret/acts_as_ferret (decisione legacy) su un progetto cliente.Consiglio vivamente di guardare il altro prima le opzioni.

aaf è molto fragile e può bloccare bruscamente la tua app Rails se commetti un errore nella configurazione o se per qualche motivo riscontri un bug in aaf.

In tal caso, invece di avere semplicemente la funzionalità di ricerca inutilizzabile, qualsiasi azione del controller che tocca un modello indicizzato fallirà completamente e solleverà un'eccezione.Che è baaad, ok?

Io uso il agisce_come_xapian collegare.Ho seguito questo tutorial:

http://locomotivation.com/2008/07/23/simple-ruby-on-rails-full-text-search-using-xapian

Funziona molto bene

Sto usando act_as_ferret.È facile da configurare e generalmente veloce.La funzionalità integrata di ricerca dei record attivi è molto utile:puoi applicare qualsiasi condizione o unirti ad altri modelli dopo che la ricerca ha trovato i record corrispondenti.

A differenza di Sphinx, non devi reindicizzare TUTTI i tuoi record quando aggiungi nuovi dati.Ci sono hook after_save e after_update che inseriranno il tuo nuovo record nel db ferret.Questo è stato uno dei grandi punti di forza per me.

Quando devi indicizzare in massa i tuoi dati, furetto è decisamente più lento di act_as_sphinx (di un fattore 3).Ho finito per scrivere il mio metodo per reindicizzare i modelli che funziona velocemente come Sphinx: fondamentalmente precarica tutti i dati dal DB invece di andare record per record per creare il nuovo indice.

La documentazione di ferret è buona per le nozioni di base, ma è un po' scarsa una volta che si iniziano a effettuare ricerche, ordinamenti e ordinamenti più complessi e si utilizza un server dRb per ospitare un indice remoto.Detto questo, sembra un prodotto molto più maturo di act_as_sphinx, anche se ho un'esperienza limitata con sphinx.

Se utilizzi un servizio di hosting condiviso come me (Bluehost), le tue opzioni potrebbero essere limitate a ciò che offre il provider.Nel mio caso, non sono riuscito a trovare un modo valido e affidabile per avviare e mantenere in esecuzione un server separato, come Lucene o Solr.

Pertanto, ho scelto Xapian e per me ha funzionato bene.Ci sono 2 plugin per i binari che ho ricercato:agisce_come_xapian e xapian_fu.Il primo ti farà andare avanti velocemente, ma non sembra più essere mantenuto.Ho appena iniziato a lavorare con xapian_fu.

Nel caso qualcuno fosse ancora interessato, l'ultima cosa da usare adesso è elasticsearch.Ci sono gemme disponibili per questo pneumatico O binari di ricerca elastici.Si basa anche su Lucene come Solr, basato su Java.Solr è effettivamente integrato con questo progetto ora...

Ho usato Thinking Sphinx e sembra abbastanza buono, ma non ho avuto il tempo di valutare tutte le opzioni.

Raccomando Thinking Sphinx.È l'opzione più veloce secondo me.

Ho usato Ferret e ha funzionato bene per i miei scopi, ma non ho valutato le altre opzioni.

Un'opzione che non ho provato è basata su C++ Xapian

Stiamo usando http://hyperestraier.sourceforge.net/, che è stato ereditato.Non ho esaminato altri motori, ma hyperestraier fornisce tutti i ganci necessari.Tuttavia, impostare l'indice di ricerca è complicato.Probabilmente sono disponibili opzioni più semplici.

Dipende da quale database stai utilizzando.Consiglierei di utilizzare Solr poiché offre molte opzioni interessanti per la ricerca fuzzy e ha un ottimo parser di query.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.

Sto usando un'opzione diversa che è stata elaborata sorprendentemente bene.Sto usando jruby e parlo direttamente con lucene.

Ho utilizzato act_as_solr in passato e ho riscontrato alcuni problemi.principalmente effettua una chiamata sincrona per ogni salvataggio AR.Questo non è poi così male, ma nella mia situazione un salvataggio a volte causava molte chiamate sincrone a solr e occasionalmente richiedeva più tempo di quello consentito da mongrel e ricevevo un'eccezione di timeout bastardo (o qualcosa del genere)

Thinking Sphinx è un'alternativa migliore rispetto a Ultrasphinx, che sembra abbandonato, ma, in generale, Xapian ha un motore più potente di Sphinx ed è più semplice per implementare la ricerca in tempo reale.

Raccomando act_as_ferret.Ma anche se la parte difficile è farlo funzionare correttamente sul tuo server, una volta fatto non avrai quasi alcun problema poiché il server ferret verrà eseguito come processo in background separato per aggiornare il tuo indice ogni volta che c'è un nuovo aggiornamento.Inoltre, per noi funziona benissimo in mongrel con apache.

Anch'io ho cercato la soluzione perfetta.All'inizio ho scelto Thinking Sphinx, che ha funzionato bene.Ma dal momento che intendo ospitare la mia webapp su Heroku, l'unica opzione è utilizzare Sol.Lo svantaggio più grande, tuttavia, è lo sviluppo del main agisce_come_solr gem sembra essersi fermato dopo maggio 2008.Quindi è troppo vecchio per i miei gusti.Ho appena trovato Macchie solari come alternativa avanzata e con aggiornamenti recenti, quindi è quello che prenderò in considerazione.

Un'altra opzione offerta da Heroku è quella di scegliere un server di indice ospitato basato su Solr, denominato Websolr.La gemma richiesta websolr-acts_as_solr per fortuna è anche molto aggiornato.

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