Mysql
 sql >> Database >  >> RDS >> Mysql

Confronto del motore di ricerca full-text - Lucene, Sphinx, Postgresql, MySQL?

È bello vedere che qualcuno è intervenuto su Lucene, perché non ne ho idea.

Sfinge, invece, la conosco abbastanza bene, quindi vediamo se posso esserti d'aiuto.

  • La classifica della pertinenza dei risultati è l'impostazione predefinita. Se lo desideri, puoi impostare il tuo ordinamento e assegnare a campi specifici pesi più elevati.
  • La velocità di indicizzazione è super veloce, perché comunica direttamente con il database. Qualsiasi lentezza proverrà da query SQL complesse e chiavi esterne non indicizzate e altri problemi simili. Nemmeno io ho notato alcuna lentezza nella ricerca.
  • Sono un ragazzo di Rails, quindi non ho idea di quanto sia facile implementarlo con Django. Tuttavia, esiste un'API Python fornita con il sorgente Sphinx.
  • Il daemon del servizio di ricerca (searchd) è piuttosto basso sull'utilizzo della memoria e puoi impostare limiti su quanta memoria utilizza anche il processo di indicizzazione.
  • La scalabilità è il punto in cui le mie conoscenze sono più imprecise, ma è abbastanza facile copiare i file di indice su più macchine ed eseguire diversi demoni cercati. L'impressione generale che ricevo dagli altri, tuttavia, è che sia dannatamente buono sotto carico elevato, quindi ridimensionarlo su più macchine non è qualcosa che deve essere affrontato.
  • Non c'è supporto per 'did-you-mean', ecc, anche se questi possono essere fatti abbastanza facilmente con altri strumenti. Sphinx fa derivare le parole anche se utilizza i dizionari, quindi 'guidare' e 'guidare' (per esempio) sarebbero considerati gli stessi nelle ricerche.
  • Sfinge, tuttavia, non consente aggiornamenti parziali dell'indice per i dati del campo. L'approccio comune a questo è mantenere un indice delta con tutte le modifiche recenti e reindicizzarlo dopo ogni modifica (e quei nuovi risultati vengono visualizzati entro un secondo o due). A causa della piccola quantità di dati, l'operazione può richiedere alcuni secondi. Tuttavia, dovrai comunque reindicizzare regolarmente il set di dati principale (sebbene quanto regolarmente dipenda dalla volatilità dei tuoi dati - ogni giorno? ogni ora?). Tuttavia, le elevate velocità di indicizzazione mantengono tutto questo abbastanza indolore.

Non ho idea di quanto sia applicabile alla tua situazione, ma Evan Weaver ha confrontato alcune delle comuni opzioni di ricerca di Rails (Sphinx, Ferret (un porto di Lucene per Ruby) e Solr), eseguendo alcuni benchmark. Potrebbe essere utile, immagino.

Non ho esplorato le profondità della ricerca full-text di MySQL, ma so che non è in concorrenza né in termini di velocità né in termini di funzionalità con Sphinx, Lucene o Solr.