MySQL - ngram Full-Text Parser: Ein Anfängerleitfaden
Hallo da draußen, zukünftige Datenbank-Zauberer! Heute begeben wir uns auf eine aufregende Reise in die Welt des MySQL's ngram Full-Text Parser. Machen Sie sich keine Sorgen, wenn Sie neu in der Programmierung sind - ich werde Ihr freundlicher Führer sein und alles Schritt für Schritt erklären. Also, schnappen Sie sich eine Tasse Kaffee, und lassen Sie uns eintauchen!
Der ngram Full-Text Parser: Was ist daran so besonders?
Stellen Sie sich vor, Sie versuchen, ein bestimmtes Buch in einer riesigen Bibliothek zu finden. Wäre es nicht großartig, wenn Sie nur ein paar Wörter eingeben könnten und sofort finden würden, wonach Sie suchen? Genau das tut der ngram Full-Text Parser für Datenbanken!
Der ngram-Parser ist wie ein superkluger Bibliothekar, der Text in kleine Stücke (genannt ngrams) zerlegt und Ihnen hilft, schnell und effizient durch sie zu suchen. Er ist besonders nützlich für Sprachen, die keine Leerzeichen zwischen den Wörtern verwenden, wie Chinesisch oder Japanisch.
Was ist ein ngram?
Ein ngram ist eine kontinuierliche Folge von n Elementen aus einem gegebenen Text. Zum Beispiel, wenn wir das Wort "hello" haben und n = 2 (was wir einen Bigramm nennen), würden wir bekommen:
- he
- el
- ll
- lo
Ziemlich cool, oder? Jetzt sehen wir uns an, wie wir dies in MySQL verwenden können!
Konfigurieren der ngram-Token-Größe
Bevor wir mit dem ngram-Parser beginnen, müssen wir ihm sagen, wie groß unsere ngrams sein sollen. Dies wird als Token-Größe bezeichnet.
So können wir es einstellen:
SET GLOBAL ngram_token_size = 2;
Dies setzt unsere ngram-Größe auf 2 (Bigramme). Aber denken Sie daran, Sie benötigen besondere Berechtigungen, um globale Variablen zu ändern. Wenn Sie gerade anfangen, muss Ihr Datenbankadministrator dies möglicherweise für Sie tun.
Erstellen eines FULLTEXT-Index mit dem ngram-Parser
Jetzt, wo wir unsere Token-Größe festgelegt haben, lassen wir eine Tabelle erstellen und einen FULLTEXT-Index mit dem ngram-Parser hinzufügen:
CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
content TEXT,
FULLTEXT INDEX ngram_idx (content) WITH PARSER ngram
) ENGINE=InnoDB;
In diesem Beispiel erstellen wir eine Tabelle namens 'articles' mit einer 'id', einem 'title' und einer 'content'-Spalte. Das Zauberhafte passiert in der letzten Zeile, wo wir einen FULLTEXT-Index auf der 'content'-Spalte mit dem ngram-Parser erstellen.
Umgang mit Leerzeichen beim ngram-Parser
Eine coole Sache beim ngram-Parser ist, wie er mit Leerzeichen umgeht. Er behandelt sie genau wie jedes andere Zeichen. Also, "hello world" mit Bigrammen wäre:
- he
- el
- ll
- lo
- o
- w
- wo
- or
- rl
- ld
Dies macht es großartig für die Suche nach Phrasen!
Umgang mit Stoppwörtern beim ngram-Parser
Im Gegensatz zu einigen anderen Parsern verwendet der ngram-Parser keine Stoppwörter. Stoppwörter sind übliche Wörter wie "the" oder "and", die bei Suchvorgängen oft ignoriert werden. Der ngram-Parser beinhaltet alles, was je nach Ihren Bedürfnissen sowohl gut als auch schlecht sein kann.
Phrasensuche mit dem ngram-Parser
Lassen Sie uns eine Phrasensuche versuchen! Zuerst fügen wir einige Daten zu unserer Tabelle hinzu:
INSERT INTO articles (title, content) VALUES
('MySQL Tutorial', 'MySQL ist eine beliebte Datenbank'),
('Python Guide', 'Python ist eine Programmiersprache');
Jetzt suchen wir nach "beliebte Datenbank":
SELECT * FROM articles
WHERE MATCH(content) AGAINST('beliebte Datenbank' IN BOOLEAN MODE);
Dies sollte unseren MySQL Tutorial Artikel zurückgeben.
Termsuche mit dem ngram-Parser
Wir können auch nach einzelnen Begriffen suchen. Lassen Sie uns versuchen, nach "Programmierung" zu suchen:
SELECT * FROM articles
WHERE MATCH(content) AGAINST('Programmierung' IN BOOLEAN MODE);
Dies sollte unseren Python Guide Artikel zurückgeben.
Wildcard-Suche mit dem ngram-Parser
Der ngram-Parser unterstützt keine Wildcard-Suchen im traditionellen Sinne. Allerdings, weil er Wörter in kleine Stücke zerlegt, kann er immer noch teilweise Übereinstimmungen finden. Zum Beispiel:
SELECT * FROM articles
WHERE MATCH(content) AGAINST('prog' IN BOOLEAN MODE);
Dies könnte immer noch unseren "Programmierung"-Artikel finden, obwohl wir nur einen Teil des Wortes gesucht haben.
Verwendung des ngram Full-Text Parser in einem Client-Programm
Schließlich sehen wir uns an, wie wir den ngram-Parser in einem Python-Programm verwenden könnten:
import mysql.connector
# Verbindung zur Datenbank herstellen
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()
# Suche durchführen
query = "SELECT * FROM articles WHERE MATCH(content) AGAINST(%s IN BOOLEAN MODE)"
search_term = 'Datenbank'
cursor.execute(query, (search_term,))
# Ergebnisse ausgeben
for (id, title, content) in cursor:
print(f"ID: {id}, Titel: {title}, Inhalt: {content}")
# Verbindung schließen
cursor.close()
cnx.close()
Dieses Programm verbindet sich mit Ihrer MySQL-Datenbank, führt eine Suche mit dem ngram-Parser durch und gibt die Ergebnisse aus.
Und da haben Sie es, Leute! Wir sind durch das Land des ngram Full-Text Parsing in MySQL gereist. Denken Sie daran, Übung macht den Meister, also haben Sie keine Angst, mit diesen Konzepten zu experimentieren. Bevor Sie es wissen, werden Sie parsen und suchen wie ein Profi!
Methode | Beschreibung |
---|---|
SET GLOBAL ngram_token_size = n |
Konfiguriert die Größe der ngram-Token |
CREATE TABLE... FULLTEXT INDEX... WITH PARSER ngram |
Erstellt eine Tabelle mit einem FULLTEXT-Index mit dem ngram-Parser |
INSERT INTO... VALUES... |
Fügt Daten in die Tabelle ein |
SELECT... WHERE MATCH(...) AGAINST(... IN BOOLEAN MODE) |
Führt eine Volltextsuche mit dem ngram-Parser durch |
Viel Spaß beim Programmieren und mögen Ihre Abfragen immer die Ergebnisse zurückgeben, die Sie suchen!
Credits: Image by storyset