magazzino disordinato di appunti
MySQL Full Text Search
MySQL ha la possibilità di implementare un motore di ricerca con interrogazioni in linguaggio naturale, come quelle che si fanno sui motori di ricerca tipo Google. I risultati delle ricerche sono ordinati in base alla loro rilevanza.
Requisiti per implementare la ricerca full-text:
- MySQL versione 3.23.23 o superiore
- tabelle in formato MyISAM
- campi di tipo CHAR, VARCHAR o TEXT
- creazione di un indice FULLTEXT
Sintassi per ricerca di tipo "natural language":
SELECT id, MATCH (title,body) AGAINST ('Tutorial') FROM articles;
Alcune parole vengono ignorate:
- parole con meno di 4 caratteri (impostazione di default)
- parole che compaiono almeno nel 50% dei record
- parole nella lista stopwords
Una stopword è una parola come "the" oppure "some" che è tanto comune da non avere valore. Esiste una lista di stopwords precompilata che può essere sovrascritta dall'amministratore.
Boolean Mode
A partire dalla versione 4.0.1 è possibile fare ricerche in modalità booleana:
SELECT *
FROM articles
WHERE MATCH (title,body)
AGAINST ('+MySQL -YourSQL'IN BOOLEAN MODE);
Si possono usare operatori per chiedere che una parola sia presente (operatore "+") o assente (operatore "-"). Ci sono altri operatori per ricerche più elaborate.
Le ricerche booleane si differenziano per alcune caratteristiche particolari:
- non usano la soglia del 50% per l'esclusione di una parola
- non ordinano automaticamente i risultati secondo la rilevanza
- possono funzionare anche senza indice FULLTEXT, anche se query di questo tipo saranno abbastanza lente
Indici
Creazione di un indice FULLTEXT su una tabella esistente:
ALTER TABLE articles ADD FULLTEXT (title,body);
Creazione di un indice FULLTEXT al momento della creazione di una tabella:
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);
Riferimenti: Full-Text Search Functions (mysql.com)