Press "Enter" to skip to content

CakePHP: come effettuare ricerche full text search

Condividi il post con i tuoi amici o colleghi

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 😉


Condividi il post con i tuoi amici o colleghi