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

La ricerca full-text è la risposta?

Il problema con la ricerca di tipo '%keyword%' è che non c'è modo di cercare in modo efficiente su di essa in una tabella normale, anche se si crea un indice su quella colonna. Pensa a come saresti quella stringa in su nell'elenco telefonico. In realtà non c'è modo di ottimizzarlo - devi scansionare l'intera rubrica telefonica - ed è quello che fa MySQL, una scansione completa della tabella.

Se modifichi la ricerca in "parola chiave%" e utilizzi un indice, puoi ottenere una ricerca molto veloce. Tuttavia, sembra che questo non sia quello che vuoi.

Quindi, con questo in mente, ho usato un po' l'indicizzazione/ricerca fulltext, e qui ci sono alcuni pro e contro:

Pro

  • Molto veloce
  • Restituisce i risultati ordinati per pertinenza (per impostazione predefinita, anche se puoi utilizzare qualsiasi ordinamento)
  • È possibile utilizzare le parole d'arresto.

Contro

  • Funziona solo con le tabelle MyISAM
  • Le parole troppo corte vengono ignorate (il minimo predefinito è 4 lettere)
  • Richiede una clausola SQL diversa in where, quindi dovrai modificare le query esistenti.
  • Non corrisponde a stringhe parziali (ad esempio, 'parola' non corrisponde a 'parola chiave', solo 'parola')

Ecco una buona documentazione sulla ricerca full-text .

Un'altra opzione è utilizzare un sistema di ricerca come Sphinx . Può essere estremamente veloce e flessibile. È ottimizzato per la ricerca e si integra bene con MySQL.