Testen der Volltextabfrageergebnisse
In diesem Schritt werden wir unsere Volltextabfragen testen und verbessern, um sicherzustellen, dass sie die gewünschten Ergebnisse liefern. Wir werden mit verschiedenen Suchbegriffen und booleschen Operatoren experimentieren, um die bestmögliche Suchgenauigkeit zu erreichen.
Zunächst stellen Sie sicher, dass Sie mit dem MySQL-Server verbunden sind und die Datenbank search_db
verwenden. Wenn Sie die Verbindung geschlossen haben, verbinden Sie sich erneut mit:
mysql -u root -p
Geben Sie das Root-Passwort ein, wenn Sie dazu aufgefordert werden. Wählen Sie dann die Datenbank aus:
USE search_db;
Beginnen wir damit, die Daten in unserer Tabelle articles
zu überprüfen:
SELECT * FROM articles;
Dies zeigt Ihnen den aktuellen Inhalt der Tabelle:
+----+--------------------------+---------------------------------------------------------------------+
| id | title | content |
+----+--------------------------+---------------------------------------------------------------------+
| 1 | MySQL Full-Text Search | This article explains how to use full-text search in MySQL. |
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. |
| 3 | Optimizing MySQL Queries | Tips and tricks for optimizing your MySQL queries for better performance. |
+----+--------------------------+---------------------------------------------------------------------+
3 rows in set (0.00 sec)
Jetzt versuchen wir eine komplexere boolesche Abfrage. Angenommen, wir möchten Artikel finden, die das Wort "MySQL" und entweder "indexing" oder "optimizing" enthalten. Wir können dies erreichen, indem wir Klammern verwenden, um die optionalen Begriffe zu gruppieren:
SELECT * FROM articles WHERE MATCH (title, content) AGAINST ('+MySQL +(indexing optimizing)' IN BOOLEAN MODE);
Diese Abfrage erfordert "MySQL" und dann entweder "indexing" oder "optimizing".
Die Ausgabe wird sein:
+----+--------------------------+---------------------------------------------------------------------+
| id | title | content |
+----+--------------------------+---------------------------------------------------------------------+
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. |
| 3 | Optimizing MySQL Queries | Tips and tricks for optimizing your MySQL queries for better performance. |
+----+--------------------------+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
Artikel 1 wird ausgeschlossen, weil er nur "MySQL" und nicht "indexing" oder "optimizing" enthält.
Versuchen wir ein weiteres Szenario. Angenommen, wir möchten Artikel finden, die über "MySQL" handeln, aber speziell nicht über "queries".
SELECT * FROM articles WHERE MATCH (title, content) AGAINST ('+MySQL -queries' IN BOOLEAN MODE);
Diese Abfrage erfordert "MySQL" und schließt Artikel aus, die "queries" enthalten.
Die Ausgabe wird sein:
+----+------------------------+---------------------------------------------------------------------+
| id | title | content |
+----+------------------------+---------------------------------------------------------------------+
| 1 | MySQL Full-Text Search | This article explains how to use full-text search in MySQL. |
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. |
+----+------------------------+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
Artikel 3, der über "MySQL Queries" handelt, wird ausgeschlossen.
Jetzt experimentieren wir mit der Bewertung der Ergebnisse. Wir können die Operatoren >
und <
verwenden, um die Relevanzbewertung zu beeinflussen. Angenommen, wir möchten Artikel über "MySQL" finden, aber Artikel, die auch "indexing" erwähnen, priorisieren:
SELECT id, title, content, MATCH (title, content) AGAINST ('+MySQL >indexing' IN BOOLEAN MODE) AS relevance FROM articles WHERE MATCH (title, content) AGAINST ('+MySQL >indexing' IN BOOLEAN MODE) ORDER BY relevance DESC;
Diese Abfrage erfordert "MySQL" und erhöht die Relevanz von Artikeln, die "indexing" enthalten. Die Ergebnisse werden dann nach Relevanz in absteigender Reihenfolge sortiert.
Die Ausgabe wird sein:
+----+--------------------------+---------------------------------------------------------------------+-----------+
| id | title | content | relevance |
+----+--------------------------+---------------------------------------------------------------------+-----------+
| 2 | Indexing in MySQL | Learn about different types of indexes in MySQL, including full-text indexes. | 1.6931 |
| 1 | MySQL Full-Text Search | This article explains how to use full-text search in MySQL. | 0.3068 |
| 3 | Optimizing MySQL Queries | Tips and tricks for optimizing your MySQL queries for better performance. | 0.3068 |
+----+--------------------------+---------------------------------------------------------------------+-----------+
3 rows in set (0.00 sec)
Beachten Sie, dass der Artikel "Indexing in MySQL" jetzt an erster Stelle erscheint, weil er aufgrund des Begriffs >indexing
eine höhere Relevanzbewertung hat.
Durch Experimentieren mit verschiedenen Suchbegriffen und booleschen Operatoren können Sie Ihre Volltextabfragen optimieren, um die gewünschten Ergebnisse zu erzielen. Denken Sie immer daran, Ihre Abfragen gründlich zu testen, um sicherzustellen, dass sie wie erwartet funktionieren.
Dies schließt das Lab zur Volltextsuche in MySQL ab. Sie haben gelernt, wie Sie einen Volltextindex hinzufügen, grundlegende Suchen mit MATCH AGAINST
durchführen, den booleschen Modus für erweiterte Suchen verwenden und Ihre Abfrageergebnisse testen.