MySQL - Boolean Full-Text Search

Hallo, angehende Datenbankenthusiasten! Heute tauchen wir ein in die faszinierende Welt der MySQL Boolean Full-Text Suche. Als Ihr freundlicher Nachbarschafts-EDV-Lehrer freue ich mich darauf, Sie auf dieser Reise zu führen. Machen Sie sich keine Sorgen, wenn Sie neu im Programmieren sind – wir beginnen mit den Grundlagen und arbeiten uns hinauf. Holen Sie sich eine Tasse Kaffee (oder Tee, wenn das Ihr Ding ist) und los geht's!

MySQL - Boolean Fulltext Search

Was ist MySQL Boolean Full-Text Search?

Stellen Sie sich vor, Sie suchen ein bestimmtes Buch in einer riesigen Bibliothek. Wäre es nicht großartig, wenn Sie der Bibliothekarin einfach sagen könnten: "Ich suche ein Buch über Drachen, aber nicht über Ritter, und es muss Magie erwähnen"? Genau das macht die MySQL Boolean Full-Text Suche für Ihre Datenbank!

MySQL Boolean Full-Text Search ist eine leistungsstarke Funktion, die es Ihnen ermöglicht, nach bestimmten Wörtern oder Phrasen innerhalb großer Mengen von Textdaten zu suchen. Es ist, als hätten Sie eine superkluge Bibliothekarin für Ihre Datenbank, die schnell genau das finden kann, was Sie suchen.

Lassen Sie uns mit einem einfachen Beispiel beginnen:

CREATE TABLE books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
description TEXT,
FULLTEXT(description)
);

INSERT INTO books (title, description) VALUES
('The Dragon\'s Quest', 'A magical adventure with dragons and wizards'),
('Knight\'s Tale', 'A story of brave knights and their quests'),
('Enchanted Forest', 'Magical creatures in a mysterious forest');

SELECT * FROM books
WHERE MATCH(description) AGAINST('dragons +magical -knights' IN BOOLEAN MODE);

In diesem Beispiel erstellen wir eine Tabelle namens 'books' und fügen einige Beispiel Daten hinzu. Die letzte Abfrage ist der Ort, wo die Magie passiert. Sie sucht nach Büchern, die:

  • Das Wort 'dragons' enthalten
  • Das Wort 'magical' enthalten müssen (dafür steht das '+')
  • Das Wort 'knights' nicht enthalten dürfen (dafür steht das '-')

Das Ergebnis? Es wird 'The Dragon's Quest' zurückgeben, weil es alle diese Kriterien erfüllt.

MySQL Boolean Full-Text Search Operatoren

Nun schauen wir uns einige der Operatoren an, die wir in der Boolean Full-Text Suche verwenden können. Denken Sie daran als besondere Anweisungen für unsere Datenbankbibliothekarin:

Operator Beschreibung Beispiel
+ Muss dieses Wort enthalten +dragon
- Muss dieses Wort nicht enthalten -knight
> Erhöht Relevanz >magic
< Verringert Relevanz <forest
* Joker (passt jede Endung) drag*
" " Exakte Phrase "magic wand"
() Gruppierung (+magic +wand) -broom

Sehen wir uns diese in Aktion an:

SELECT * FROM books
WHERE MATCH(description) AGAINST('>magic +creatures -knights ("enchanted forest")' IN BOOLEAN MODE);

Diese Abfrage sucht nach Büchern, die:

  • Vorzugsweise 'magic' enthalten (aber es ist nicht erforderlich)
  • 'creatures' enthalten müssen
  • 'knights' nicht enthalten dürfen
  • Die exakte Phrase "enchanted forest" enthalten sollten

Können Sie erraten, welches Buch zurückgegeben wird? Richtig, 'Enchanted Forest'!

MySQL Boolean Full-Text Search Features

Relevanzbewertung

Eine der coolersten Funktionen der Boolean Full-Text Suche ist die Relevanzbewertung. MySQL findet nicht nur passende Ergebnisse, sondern bewertet sie auch basierend auf, wie gut sie zu den Suchkriterien passen.

SELECT *, MATCH(description) AGAINST('magic dragons' IN BOOLEAN MODE) AS relevance
FROM books
WHERE MATCH(description) AGAINST('magic dragons' IN BOOLEAN MODE)
ORDER BY relevance DESC;

Diese Abfrage gibt alle Bücher zurück, die 'magic' oder 'dragons' enthalten, und bewertet sie nach ihrer Relevanz zu diesen Begriffen.

Joker-Suchen

Erinnern Sie sich an den '*' Operator, den wir earlier erwähnt haben? Er ist unglaublich nützlich, um Wörter mit verschiedenen Endungen zu finden:

SELECT * FROM books
WHERE MATCH(description) AGAINST('mag*' IN BOOLEAN MODE);

Dies findet Bücher mit Wörtern wie 'magic', 'magical', 'mage' und so weiter.

Phrasensuchen

Wenn Sie eine exakte Phrase finden möchten, verwenden Sie Anführungszeichen:

SELECT * FROM books
WHERE MATCH(description) AGAINST('"magical adventure"' IN BOOLEAN MODE);

Dies gibt nur Bücher zurück, die die exakte Phrase "magical adventure" enthalten.

Boolean Full-Text Search Using Client Program

Obwohl wir bislang direkte SQL-Abfragen verwendet haben, verwenden Sie in der realen Welt oft ein.Client-Programm, um mit Ihrer Datenbank zu interagieren. Hier ist ein einfaches Python-Beispiel mit der mysql-connector Bibliothek:

import mysql.connector

def search_books(keyword):
conn = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database"
)
cursor = conn.cursor()

query = "SELECT * FROM books WHERE MATCH(description) AGAINST(%s IN BOOLEAN MODE)"
cursor.execute(query, (keyword,))

results = cursor.fetchall()
for row in results:
print(f"Titel: {row[1]}, Beschreibung: {row[2]}")

cursor.close()
conn.close()

search_books('+magic -knights')

Diese Funktion verbindet sich zu Ihrer MySQL-Datenbank, führt eine Boolean Full-Text Suche durch und gibt die Ergebnisse aus.

Und das war's, Leute! Wir sind durch die Welt der MySQL Boolean Full-Text Suche gereist, von den Grundlagen bis zu praktischen Anwendungen. Denken Sie daran, wie bei jeder leistungsstarken Werkzeug, es braucht Übung, um es zu meistern. Also fürchten Sie sich nicht davor, zu experimentieren und Fehler zu machen – das ist, wie wir lernen!

Bevor wir aufhören, hier ist eine kleine Geschichte aus meinen Lehrtagen: Ich hatte einmal einen Schüler, der mit Datenbanksuchen kämpfte. Er versuchte, eine Nadel im Heuhaufen zu finden, indem er jede Heu einzeln überprüfte. Als ich ihm Full-Text Search vorstellte, leuchteten seine Augen wie von Magie entdeckt. Und auf eine Weise hatte er das auch – denn das ist, was gute Technologie tut – sie macht das Unmögliche magisch.

Weiter üben, neugierig bleiben und viel Spaß beim Suchen!

Credits: Image by storyset