This is a read-only copy of the MariaDB Knowledgebase generated on 2024-12-22. For the latest, interactive version please visit https://mariadb.com/kb/.

MATCH AGAINST

Sintassi

MATCH (col1, col2, ...) AGAINST (espr [modificatore])

Spiegazione

MySQL supporta gli indici e le ricerche fulltext:

  • Un indice fulltext in MySQL è un indice di tipo FULLTEXT.
  • Gli indici fulltext possono essere utilizzati solo con tabelle MyISAM, e possono essere creati solo su colonne CHAR, VARCHAR o TEXT.
  • Una definizione di indice FULLTEXT può essere specificata in un'istruzione CREATE TABLE quando si crea una tabella, o aggiunta successivamente utilizzando ALTER TABLE o CREATE INDEX.
  • Per i grandi insiemi di risultati, è molto più veloce caricare i dati in una tabella che non ha indici FULLTEXT e creare questi indici successivamente, piuttosto che caricare i dati direttamente in una tabella che ha un indice FULLTEXT.

La ricerca fulltext si esegue utilizzando la sintassi MATCH() ... AGAINST. MATCH() accetta la lista dei nomi delle colonne su cui si effettua la ricerca, separati da virgole. AGAINST accetta una stringa da cercare, e opzionalmente un modificatore che indicano il tipo di ricerca desiderata. La stringa di ricerca deve essere una stringa letterale, non una variabile o un nome di colonna. Esistono tre tipi di ricerche fulltext:

  • Una ricerca booleana interpreta la stringa di ricerca utilizzando le regole di uno speciale linguaggio di interrogazione. La stringa contiene le parole da cercare. Ma può contenere anche degli operatori che specificano altri requisiti, ad esempio che una parola deve essere presente o assente nelle righe, o che deve avere un peso più alto o più basso rispetto alle altre. Alcuni termini comuni come "some" e "then" sono delle stopword, e vengono ignorate. Il modificatore IN BOOLEAN MODE specifica che la ricerca è booleana. Per ulteriori informazioni, si veda http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html.
  • Una ricerca in linguaggio naturale interpreta la stringa di ricerca come una frase in una lingua umana (una frase in un testo libero). Non ci sono operatori speciali. Anche qui si applica la lista delle stopword. Inoltre, i termini che sono presenti in più del 50% delle righe sono considerate comuni e vengono ignorate. Le ricerche fulltext sono considerate in linguaggio naturale se viene specificato IN NATURAL LANGUAGE MODE, oppure se non viene specificato alcun modificatore.
  • Una ricerca ad espansione è una variante delle ricerche a linguaggio naturale. La stringa di ricerca è utilizzata per effettuare una ricerca in linguaggio naturale. Poi le parole presenti nelle righe più rilevanti restituite dalla ricerca vengono aggiunte alla stringa di ricerca, e l'operazione viene ripetuta. La query restituisce le righe della seconda ricerca. I modificatori IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION e WITH QUERY EXPANSION indicano una ricerca ad espansione. Per ulteriori informazioni, si veda http://dev.mysql.com/doc/refman/5.1/en/fulltext-query-expansion.html.

I modificatori IN NATURAL LANGUAGE MODE e IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION sono stati aggiunti in MySQL 5.1.7.

Esempi

mysql> SELECT id, body, MATCH (title,body) AGAINST
    -> ('Security implications of running MySQL as root'
    -> IN NATURAL LANGUAGE MODE) AS score
    -> FROM articles WHERE MATCH (title,body) AGAINST
    -> ('Security implications of running MySQL as root'
    -> IN NATURAL LANGUAGE MODE);
+----+-------------------------------------+-----------------+
| id | body                                | score           |
+----+-------------------------------------+-----------------+
|  4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 |
|  6 | When configured properly, MySQL ... | 1.3114095926285 |
+----+-------------------------------------+-----------------+
2 rows in set (0.00 sec)
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.