MySQL - Parser di testo completo ngram: Una guida per principianti

Ciao a tutti, futuri maghi dei database! Oggi, intraprenderemo un viaggio emozionante nel mondo del Parser di testo completo ngram di MySQL. Non preoccupatevi se siete nuovi alla programmazione - sarò la vostra guida amichevole, spiegando tutto passo dopo passo. Quindi, prendetevi una tazza di caffè e tuffiamoci!

MySQL - ngram Fulltext Parser

Il Parser di testo completo ngram: Qual è il punto cruciale?

Immaginate di cercare un libro specifico in una biblioteca enorme. Non sarebbe fantastico se poteste semplicemente digitare alcune parole e trovare immediatamente quello che state cercando? Questo è esattamente ciò che il Parser di testo completo ngram fa per i database!

Il parser ngram è come un bibliotecario super-intelligente che divide il testo in piccoli frammenti (chiamati ngram) e vi aiuta a cercare attraverso di essi rapidamente ed efficientemente. È particolarmente utile per le lingue che non usano spazi tra le parole, come il cinese o il giapponese.

Cos'è un ngram?

Un ngram è una sequenza continua di n elementi da un testo dato. Ad esempio, se abbiamo la parola "hello" e n = 2 (che chiamiamo bigram), otterremmo:

  • he
  • el
  • ll
  • lo

Molto bello, vero? Ora, vediamo come possiamo usarlo in MySQL!

Configurazione della dimensione del token ngram

Prima di iniziare a usare il parser ngram, dobbiamo dirgli quanto vogliamo che siano grandi i nostri ngram. Questa è chiamata dimensione del token.

Ecco come possiamo impostarla:

SET GLOBAL ngram_token_size = 2;

Questo imposta la nostra dimensione ngram a 2 (bigram). Ma ricordate, avete bisogno di privilegi speciali per modificare le variabili globali. Se siete agli inizi, il vostro amministratore di database potrebbe doverlo fare per voi.

Creazione dell'indice FULLTEXT utilizzando il parser ngram

Ora che abbiamo impostato la dimensione del token, creiamo una tabella e aggiungiamo un indice FULLTEXT utilizzando il parser ngram:

CREATE TABLE articoli (
id INT PRIMARY KEY AUTO_INCREMENT,
titolo VARCHAR(200),
contenuto TEXT,
INDICE FULLTEXT ngram_idx (contenuto) CON PARSER ngram
) ENGINE=InnoDB;

In questo esempio, stiamo creando una tabella chiamata 'articoli' con una colonna 'id', 'titolo' e 'contenuto'. La magia avviene nell'ultima riga dove creiamo un indice FULLTEXT sulla colonna 'contenuto' utilizzando il parser ngram.

Gestione dello spazio del parser ngram

Una cosa interessante del parser ngram è come gestisce gli spazi. Li tratta come qualsiasi altro carattere. Quindi, "hello world" con bigram sarebbe:

  • he
  • el
  • ll
  • lo
  • o
  • w
  • wo
  • or
  • rl
  • ld

Ciò lo rende ottimo per la ricerca di frasi!

Gestione delle parole di arresto del parser ngram

A differenza di alcuni altri parser, il parser ngram non utilizza parole di arresto. Le parole di arresto sono parole comuni come "the" o "and" che spesso vengono ignorate nelle ricerche. Il parser ngram include tutto, il che può essere sia positivo che negativo a seconda delle vostre esigenze.

Ricerca di frasi con il parser ngram

Proviamo una ricerca di frasi! Prima, aggiungiamo alcuni dati alla nostra tabella:

INSERT INTO articoli (titolo, contenuto) VALUES
('MySQL Tutorial', 'MySQL è un database popolare'),
('Guida Python', 'Python è un linguaggio di programmazione');

Ora, cerchiamo "database popolare":

SELECT * FROM articoli
WHERE MATCH(contenuto) AGAINST('database popolare' IN BOOLEAN MODE);

Questo dovrebbe restituire il nostro articolo MySQL Tutorial.

Ricerca di termini con il parser ngram

Possiamo anche cercare termini individuali. Proviamo a cercare "programmazione":

SELECT * FROM articoli
WHERE MATCH(contenuto) AGAINST('programmazione' IN BOOLEAN MODE);

Questo dovrebbe restituire il nostro articolo Guida Python.

Ricerca con caratteri jolly del parser ngram

Il parser ngram non supporta le ricerche con caratteri jolly nel senso tradizionale. Tuttavia, poiché divide le parole in piccoli frammenti, può comunque trovare corrispondenze parziali. Ad esempio:

SELECT * FROM articoli
WHERE MATCH(contenuto) AGAINST('prog' IN BOOLEAN MODE);

Questo potrebbe comunque trovare il nostro articolo "programmazione", anche se abbiamo cercato solo una parte della parola.

Parser di testo completo ngram utilizzando un programma client

Infine, vediamo come potremmo usare il parser ngram in un programma Python:

import mysql.connector

# Connessione al database
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# Esecuzione di una ricerca
query = "SELECT * FROM articoli WHERE MATCH(contenuto) AGAINST(%s IN BOOLEAN MODE)"
termo_di_ricerca = 'database'

cursor.execute(query, (termo_di_ricerca,))

# Stampa dei risultati
for (id, titolo, contenuto) in cursor:
print(f"ID: {id}, Titolo: {titolo}, Contenuto: {contenuto}")

# Chiusura della connessione
cursor.close()
cnx.close()

Questo programma si connette al vostro database MySQL, esegue una ricerca utilizzando il parser ngram e stampa i risultati.

E questo è tutto, amici! Abbiamo viaggiato attraverso il territorio del Parser di testo completo ngram in MySQL. Ricordate, la pratica rende perfetti, quindi non abbiate paura di sperimentare con questi concetti. Prima di saperlo, sarete in grado di analizzare e cercare come dei professionisti!

Metodo Descrizione
SET GLOBAL ngram_token_size = n Configura la dimensione dei token ngram
CREATE TABLE... FULLTEXT INDEX... CON PARSER ngram Crea una tabella con un indice FULLTEXT utilizzando il parser ngram
INSERT INTO... VALUES... Inserisce dati nella tabella
SELECT... WHERE MATCH(...) AGAINST(... IN BOOLEAN MODE) Esegue una ricerca full-text utilizzando il parser ngram

Buon codice e che le vostre query restituiscano sempre i risultati che state cercando!

Credits: Image by storyset