CakePHP: come effettuare ricerche full text search
Pubblicato il 15 Maggio 2017
Oggi vedremo come eseguire una query di tipo fulltext search con CakePHP. La ricerca full text search, estremamente utile se stiamo progettando un motore di ricerca, ci offre diversi vantaggi rispetto a una libera ricerca effettuata con l’operatore LIKE.
Una ricerca con l’operatore LIKE si limita a rintracciare le occorrenze di una parola nel campo sottoposto alla ricerca.
Una ricerca full text individua le righe in cui, il campo sottoposto alla ricerca, mostra un’attinenza con la chiave di ricerca. La precisione è maggiore e le performance superiori.
La ricerca full text si basa su indici che possono essere creati solo su campi di testo (char, varchar, text) e per gli storage engine MyISAM e InnoDB (a partire dalla versione 5.6). La sintassi SQL è la seguente:
SELECT * FROM pages WHERE MATCH (title) AGAINST ('example page');
Con CakePHP procederemo nel seguente modo:
$q = "example page";
$this->paginate = array(
'limit' => 10,
'fields' => array("*,MATCH(`title`) AGAINST ('" .$q ."' IN BOOLEAN MODE) as score"),
'conditions' => array("MATCH(`title`) AGAINST('$q' IN BOOLEAN MODE) ORDER BY score DESC")
);
$this->set('results', $this->paginate('Page'));
Nel caso decidiamo di usare il componente Paginator allora procederemo così:
$this->Paginator->settings = array(
'paramType' => 'querystring',
'conditions' => array("MATCH(`title`) AGAINST ('" .$q ."' IN BOOLEAN MODE) ORDER BY score DESC"),
'fields' => array("*,MATCH(`title`) AGAINST ('" .$q ."' IN BOOLEAN MODE) as score"),
'limit' => 10
);
$results = $this->Paginator->paginate("Page");
Se vuoi aggiornamenti futuri sulla ricerca di tipo full text e su CakePHP, seguimi via RSS o via email. Il box di iscrizione (gratuita ovviamente) è qui sotto 😉
Pubblicato in: