Corsi on-line

InnoDB e ricerche. Alternative alla ricerca FullText

Una delle principali limitazioni delle tabelle MySQL di tipo InnoDB è la non compatibilità con le ricerche FullText (che sono una prerogativa esclusiva delle tabelle di tipo MyISAM).

Al fine di ovviare a questa scomoda mancanza è possibile ricorrere a diversi stratagemmi. Uno dei più diffusi consiste, semplicemente, nel creare una tabella di mirror in MyISAM con i soli campi da indicizzare in modo da effettuare qui li ricerche utilizzando l’indicizzazione dei contenuti FullText. Ovviamente questa tecnica comporta più di un lato negativo tra cui un notevole aumento delle dimensioni del DB nonchè la necessità di creare delle procedure di sincronizzazione tra le due tabelle.

Una seconda alternativa consiste nell’installare un software ad hoc per effettuare le ricerche in modo preciso ed efficiente. Tra questi segnaliamo:

Grazie a questi software è possibile creare degli efficienti indici di ricerca sulle nostre tabelle MySQL ma la cosa richiede, oltre all’accesso al sistema (cosa non possibile se si è in hosting), una certa dimestichezza tecnica nell’installazione e configurazione di componenti sviluppati in linguaggi di programmazione come Java o C++.

Una terza, ed ultima soluzione, consiste semplicemente nel far ricorso al buon vecchio operatore LIKE, utilizzandolo per creare una query complessa in grado di colmare una delle sue più grandi lacune: l’incapacità di ordinare i risultati per pertinenza.
Vediamo quindi una semplice query SQL in cui i risultati sono ordinati sulla base della loro pertinenza con la keyword di ricerca. Supponiamo, ai fini del nostro esempio, di avere una tabella "articoli" con due campi di testo (titolo e testo) su cui voler effettuare la ricerca e di considerare prioritario che la keyword cercata sia presente nel titolo piuttosto che nel testo dell’articolo:

SELECT titolo, testo, (
  (CASE WHEN titolo LIKE '%musica%' THEN 2 ELSE 0 END) +
  (CASE WHEN testo LIKE '%musica%' THEN 1 ELSE 0 END)
) AS rilevanza
FROM articoli
WHERE (
  titolo LIKE '%musica%' OR
  testo LIKE '%musica%'
)
ORDER BY rilevanza DESC

Quest’ultima soluzione, ovviamene, ha un grado di efficienza limitato rispetto alle ricerche FullText oppure mediante software come Lucene, ma ha il grande vantaggio di essere di facile implementazione per chiunque e di offrire una risposta al problema in casi non particolarmente "critici".

Post correlati
I più letti del mese
Tematiche