Layer 06

Ricerca fulltext in MySQL

SELECT id, titolo, contenuto FROM articoli WHERE (titolo like ‘%frasi%’ or titolo like ‘%famose%’ ) or (contenuto like ‘%frasi%’ or contenuto like ‘%famose%’) Il tutto sarebbe troppo impegnativo sia da elaborare che da costruire. Non ben conoscendo la piattaforma su cui è basato il DB di etechs, ho provato a fare una ricerca su internet cercando un qualche bell’articoletto su MySQL e le ricerche fullText e la soluzione la si trova direttamente nel sito di MySQL http://www.mysql.com/ basta andare sulla documentazione. Si parla quindi di Ricerche fulltext e di indici fulltext. Per fare una ricerca fulltext abbiamo prima bisogno di un’indice full text per crearlo è abbastanza semplice, a tabella già costruita basta alterare e aggiungere un full text sui campi desiderati. Nell’esempio di prima:

ALTER TABLE articoli ADD FULLTEXT (titolo,contenuto)

si possono aggiungere + colonne contemporaneamente, ovviamente + colonne sono + è lento il DB a fare qualsiasi operazione di inserimento, modifica e cancellazione. Per fare la ricerca invece si utilizzano le clausole MATCH ed AGAINST. Nel MATCH() vanno inserite le colonne coinvolte nerlla ricerca, di cui deve necessariamente esistere l’indice di cui sopra. Invece in AGAINST() va inserita direttamente l’interrogazione dell’utente, quindi parafrasando l’esempio di prima diventa:

SELECT id, titolo, contenuto FROM articoli WHERE MATCH (titolo,contenuto) AGAINST (‘frasi famose’) Oltre a restituire i risultati esatti la clausola MATCH (titolo,contenuto) AGAINST (‘frasi famose’) restituisce anche una valore di rilevanza dell’interrogazione che si può visualizzare ed anche ordinare, quindi la ns query finale sarà:

SELECT id, titolo, contenuto, MATCH (titolo,contenuto) AGAINST (‘frasi famose’) as rilevanza FROM articoli WHERE MATCH (titolo,contenuto) AGAINST (‘frasi famose’) ORDER BY MATCH (titolo,contenuto) AGAINST (‘frasi famose’) DESC Le ricerche sugli articoli e le ricerche sul forum in questo sito sono costruite proprio così.

]]>