In MySQL der MATCH()
Funktion führt eine Volltextsuche durch. Es akzeptiert eine durch Kommas getrennte Liste von Tabellenspalten, die durchsucht werden sollen.
Die Tabelle/n muss/müssen einen FULLTEXT
haben index, bevor Sie eine Volltextsuche nach ihnen durchführen können (obwohl boolesche Abfragen gegen eine MyISAM
Suchindex kann — wenn auch langsam — auch ohne FULLTEXT
funktionieren Index).
Sie können einen FULLTEXT
erstellen Index beim Erstellen der Tabelle (mit dem CREATE TABLE
-Anweisung), oder Sie können die ALTER TABLE
verwenden -Anweisung oder die CREATE INDEX
Anweisung, wenn die Tabelle bereits existiert.
Standardmäßig wird bei der Suche zwischen Groß- und Kleinschreibung unterschieden. Um eine Suche mit Berücksichtigung der Groß-/Kleinschreibung durchzuführen, verwenden Sie eine Sortierung mit Berücksichtigung der Groß-/Kleinschreibung oder eine binäre Sortierung für die indizierten Spalten.
Syntax
Die Syntax für MATCH()
Funktion geht so:
MATCH (col1,col2,...) AGAINST (expr [search_modifier])
Wobei col1,col2,...
ist die durch Kommas getrennte Liste der zu durchsuchenden Spalten und expr
ist die Eingabezeichenfolge/der Ausdruck.
Der optionale search_modifier
Mit dem Argument können Sie den Suchtyp angeben. Dies kann einer der folgenden Werte sein:
IN NATURAL LANGUAGE MODE
IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
IN BOOLEAN MODE
WITH QUERY EXPANSION
Der Standardmodus ist IN NATURAL LANGUAGE MODE
.
Beispiel 1 – Grundlegende Verwendung
Hier ist ein Beispiel für die Verwendung dieser Funktion:
SELECT AlbumId, AlbumName FROM Albums WHERE MATCH(AlbumName) AGAINST('cool');
Ergebnis:
+---------+--------------------+ | AlbumId | AlbumName | +---------+--------------------+ | 5 | Casualties of Cool | +---------+--------------------+
Hier ist die vollständige Tabelle, für die die obige Abfrage ausgeführt wurde:
SELECT AlbumId, AlbumName FROM Albums;
Ergebnis:
+---------+--------------------------+ | AlbumId | AlbumName | +---------+--------------------------+ | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | +---------+--------------------------+
Beispiel 2 – Fehler:„Kann den FULLTEXT-Index nicht finden“
InnoDB
Tabellen müssen einen FULLTEXT
haben index, bevor Ergebnisse einer Volltextsuche zurückgegeben werden. Wenn es keinen FULLTEXT
hat index erhalten Sie wahrscheinlich die folgende Fehlermeldung:
ERROR 1191 (HY000): Can't find FULLTEXT index matching the column list
Wenn Sie diesen Fehler erhalten, müssen Sie einen FULLTEXT
hinzufügen Index für alle Spalten, die Sie durchsuchen möchten (siehe nächstes Beispiel).
Die Ausnahme hiervon könnte sein, wenn Sie eine boolesche Abfrage auf MyISAM
ausführen Suchindex.
Genauer gesagt heißt es in der MySQL-Dokumentation für boolesche Volltextsuchen wie folgt:
InnoDB
Tabellen erfordern einen FULLTEXT
Index auf alle Spalten des MATCH()
Ausdruck, um boolesche Abfragen auszuführen. Boolesche Abfragen gegen ein MyISAM
Suchindex kann auch ohne FULLTEXT
funktionieren index, obwohl eine auf diese Weise ausgeführte Suche ziemlich langsam wäre.
Beispiel 3 – Hinzufügen eines FULLTEXT-Index zu einer bestehenden Tabelle
Hier ist ein Beispiel für das Hinzufügen eines FULLTEXT
Index zu einer bestehenden Tabelle:
ALTER TABLE Albums ADD FULLTEXT(AlbumName);
In diesem Fall habe ich den Inhalt von AlbumName
indiziert Säule.
Um mehrere Spalten zu indizieren, trennen Sie sie mit einem Komma (siehe nächstes Beispiel).
Beispiel 4 – Durchsuchen mehrerer Spalten
Wenn Sie glauben, dass Sie mehr als eine Spalte durchsuchen müssen, müssen Sie einen Index erstellen, der alle zu durchsuchenden Spalten enthält. Fügen Sie dazu einfach jede Spalte als durch Kommas getrennte Liste ein.
Hier ist ein Beispiel, wo ich einen FULLTEXT
hinzufüge Index zum film
Tabelle (die Teil der Sakila-Beispieldatenbank ist).
ALTER TABLE film ADD FULLTEXT(title, description);
In diesem Fall indiziere ich den Inhalt des title
und description
Spalten.
Jetzt haben wir einen FULLTEXT
erstellt index für beide Spalten, können wir eine Volltextsuche gegen sie durchführen:
SELECT title, description FROM film WHERE MATCH(title, description) AGAINST('vertigo');
Ergebnis:
+-------------------+-----------------------------------------------------------------------------------------------------------+ | title | description | +-------------------+-----------------------------------------------------------------------------------------------------------+ | VERTIGO NORTHWEST | A Unbelieveable Display of a Mad Scientist And a Mad Scientist who must Outgun a Mad Cow in Ancient Japan | +-------------------+-----------------------------------------------------------------------------------------------------------+
Hier ist eine weitere Suche, bei der der genaue Schlüsselsatz nicht übereinstimmt, aber jedes Schlüsselwort innerhalb dieses Satzes:
SELECT title, description FROM film WHERE MATCH(title, description) AGAINST('Iron Maiden');
Ergebnis:
+-------------+---------------------------------------------------------------------------------------------------------+ | title | description | +-------------+---------------------------------------------------------------------------------------------------------+ | IRON MOON | A Fast-Paced Documentary of a Mad Cow And a Boy who must Pursue a Dentist in A Baloon | | MAIDEN HOME | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention | +-------------+---------------------------------------------------------------------------------------------------------+
Wenn Sie möchten, dass nur der genaue Ausdruck übereinstimmt, setzen Sie ihn in doppelte Anführungszeichen:
SELECT title, description FROM film WHERE MATCH(title, description) AGAINST('"Iron Maiden"');
Ergebnis:
Empty set (0.00 sec)
In diesem Fall enthält keine der Spalten genau diesen Ausdruck.
Beispiel 5 – Rückgabe der Relevanzbewertung
Wann immer Sie MATCH()
verwenden Funktion wird jeder Zeile in der Tabelle ein Relevanzwert zugewiesen. Mit anderen Worten, jede Zeile erhält eine Punktzahl, die bestimmt, wie relevant sie für den Suchbegriff ist. Die Ergebnisse werden dann nach Relevanz geordnet (höchste Relevanz zuerst).
Relevanzwerte sind nichtnegative Gleitkommazahlen. Null Relevanz bedeutet keine Ähnlichkeit. Die Relevanz wird basierend auf der Anzahl der Wörter in der Zeile (Dokument), der Anzahl der eindeutigen Wörter in der Zeile, der Gesamtzahl der Wörter in der Sammlung und der Anzahl der Zeilen, die ein bestimmtes Wort enthalten, berechnet.
Um die Relevanz jedes Ergebnisses zurückzugeben, fügen Sie einfach MATCH()
ein Funktion in Ihrer Liste der auszuwählenden Spalten.
Beispiel:
SELECT MATCH(title, description) AGAINST('Iron Maiden') AS Relevance, title, description FROM film WHERE MATCH(title, description) AGAINST('Iron Maiden');
Ergebnis:
+-----------+-------------+---------------------------------------------------------------------------------------------------------+ | Relevance | title | description | +-----------+-------------+---------------------------------------------------------------------------------------------------------+ | 9 | IRON MOON | A Fast-Paced Documentary of a Mad Cow And a Boy who must Pursue a Dentist in A Baloon | | 9 | MAIDEN HOME | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention | +-----------+-------------+---------------------------------------------------------------------------------------------------------+
In diesem Fall ist der Relevanzwert für beide Zeilen sehr hoch.
Hier ist eine andere, bei der die Relevanz geringer ist:
SELECT MATCH(title, description) AGAINST('Saga of a Moose') AS Relevance, title, description FROM film WHERE MATCH(title, description) AGAINST('Saga of a Moose') LIMIT 15;
Ergebnis:
+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+ | Relevance | title | description | +--------------------+------------------------+---------------------------------------------------------------------------------------------------------+ | 2.4431142807006836 | CAPER MOTIONS | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MySQL Convention | | 2.4431142807006836 | DATE SPEED | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MySQL Convention | | 2.4431142807006836 | DELIVERANCE MULHOLLAND | A Astounding Saga of a Monkey And a Moose who must Conquer a Butler in A Shark Tank | | 2.4431142807006836 | FLASH WARS | A Astounding Saga of a Moose And a Pastry Chef who must Chase a Student in The Gulf of Mexico | | 2.4431142807006836 | HAROLD FRENCH | A Stunning Saga of a Sumo Wrestler And a Student who must Outrace a Moose in The Sahara Desert | | 2.4431142807006836 | MAIDEN HOME | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention | | 2.4431142807006836 | SHANE DARKNESS | A Action-Packed Saga of a Moose And a Lumberjack who must Find a Woman in Berlin | | 2.4431142807006836 | SLEEPLESS MONSOON | A Amazing Saga of a Moose And a Pastry Chef who must Escape a Butler in Australia | | 2.4431142807006836 | WAKE JAWS | A Beautiful Saga of a Feminist And a Composer who must Challenge a Moose in Berlin | | 2.4431142807006836 | WONKA SEA | A Brilliant Saga of a Boat And a Mad Scientist who must Meet a Moose in Ancient India | | 1.2399028539657593 | AIRPLANE SIERRA | A Touching Saga of a Hunter And a Butler who must Discover a Butler in A Jet Boat | | 1.2399028539657593 | ALASKA PHANTOM | A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia | | 1.2399028539657593 | ARMY FLINTSTONES | A Boring Saga of a Database Administrator And a Womanizer who must Battle a Waitress in Nigeria | | 1.2399028539657593 | BEAR GRACELAND | A Astounding Saga of a Dog And a Boy who must Kill a Teacher in The First Manned Space Station | | 1.2399028539657593 | BERETS AGENT | A Taut Saga of a Crocodile And a Boy who must Overcome a Technical Writer in Ancient China | +--------------------+------------------------+---------------------------------------------------------------------------------------------------------+
Beachten Sie, dass die Ergebnismenge viel größer gewesen wäre, wenn ich LIMIT 15
nicht verwendet hätte um die Anzahl der Ergebnisse auf 15 zu begrenzen.
Beispiel 6 – Nur Ergebnisse über einem bestimmten Relevanzwert zurückgeben
Wir können das vorherige Beispiel noch einen Schritt weiterführen und nur die Ergebnisse mit einer bestimmten Relevanzbewertung herausfiltern. In diesem Fall gebe ich an, dass die Relevanzbewertung höher als 2 sein muss.
Seien Sie dabei jedoch vorsichtig. Wie oben gesehen, können Relevanzwerte sehr hoch oder sehr niedrig sein, abhängig von Faktoren wie z. B. wie viel Text in der Spalte ist, wie viele andere Zeilen mit dem Suchbegriff übereinstimmen usw.
SELECT MATCH(title, description) AGAINST('Saga of a Moose') AS Relevance, title, description FROM film WHERE MATCH(title, description) AGAINST('Saga of a Moose') > 2;
Ergebnis:
+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+ | Relevance | title | description | +--------------------+------------------------+---------------------------------------------------------------------------------------------------------+ | 2.4431142807006836 | CAPER MOTIONS | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MySQL Convention | | 2.4431142807006836 | DATE SPEED | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MySQL Convention | | 2.4431142807006836 | DELIVERANCE MULHOLLAND | A Astounding Saga of a Monkey And a Moose who must Conquer a Butler in A Shark Tank | | 2.4431142807006836 | FLASH WARS | A Astounding Saga of a Moose And a Pastry Chef who must Chase a Student in The Gulf of Mexico | | 2.4431142807006836 | HAROLD FRENCH | A Stunning Saga of a Sumo Wrestler And a Student who must Outrace a Moose in The Sahara Desert | | 2.4431142807006836 | MAIDEN HOME | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention | | 2.4431142807006836 | SHANE DARKNESS | A Action-Packed Saga of a Moose And a Lumberjack who must Find a Woman in Berlin | | 2.4431142807006836 | SLEEPLESS MONSOON | A Amazing Saga of a Moose And a Pastry Chef who must Escape a Butler in Australia | | 2.4431142807006836 | WAKE JAWS | A Beautiful Saga of a Feminist And a Composer who must Challenge a Moose in Berlin | | 2.4431142807006836 | WONKA SEA | A Brilliant Saga of a Boat And a Mad Scientist who must Meet a Moose in Ancient India | +--------------------+------------------------+---------------------------------------------------------------------------------------------------------+
Beispiel 7 – Null-Relevanz-Ergebnisse einbeziehen
Hier ist ein Beispiel für das Auflisten der Relevanzwerte für jede Zeile, selbst wenn der Relevanzwert Null ist. Wir können dies tun, indem wir MATCH()
nicht verwenden Funktion im WHERE
Klausel.
In diesem Beispiel verwende ich eigentlich kein WHERE
Klausel. Ich verwende nur ein LIMIT
Klausel, um die Anzahl der Ergebnisse zu begrenzen.
SELECT MATCH(title, description) AGAINST('Scientist') AS Relevance, title, description FROM film LIMIT 15;
Ergebnis:
+-------------------+------------------+-----------------------------------------------------------------------------------------------------------------------+ | Relevance | title | description | +-------------------+------------------+-----------------------------------------------------------------------------------------------------------------------+ | 1.026631474494934 | ACADEMY DINOSAUR | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies | | 0 | ACE GOLDFINGER | A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China | | 0 | ADAPTATION HOLES | A Astounding Reflection of a Lumberjack And a Car who must Sink a Lumberjack in A Baloon Factory | | 0 | AFFAIR PREJUDICE | A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank | | 0 | AFRICAN EGG | A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico | | 0 | AGENT TRUMAN | A Intrepid Panorama of a Robot And a Boy who must Escape a Sumo Wrestler in Ancient China | | 0 | AIRPLANE SIERRA | A Touching Saga of a Hunter And a Butler who must Discover a Butler in A Jet Boat | | 0 | AIRPORT POLLOCK | A Epic Tale of a Moose And a Girl who must Confront a Monkey in Ancient India | | 2.053262948989868 | ALABAMA DEVIL | A Thoughtful Panorama of a Database Administrator And a Mad Scientist who must Outgun a Mad Scientist in A Jet Boat | | 0 | ALADDIN CALENDAR | A Action-Packed Tale of a Man And a Lumberjack who must Reach a Feminist in Ancient China | | 0 | ALAMO VIDEOTAPE | A Boring Epistle of a Butler And a Cat who must Fight a Pastry Chef in A MySQL Convention | | 0 | ALASKA PHANTOM | A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia | | 0 | ALI FOREVER | A Action-Packed Drama of a Dentist And a Crocodile who must Battle a Feminist in The Canadian Rockies | | 0 | ALICE FANTASIA | A Emotional Drama of a A Shark And a Database Administrator who must Vanquish a Pioneer in Soviet Georgia | | 1.026631474494934 | ALIEN CENTER | A Brilliant Drama of a Cat And a Mad Scientist who must Battle a Feminist in A MySQL Convention | +-------------------+------------------+-----------------------------------------------------------------------------------------------------------------------+
Beispiel 8 – Boolescher Modus
MySQL ermöglicht es uns, Volltextsuchen im booleschen Modus auszuführen. Fügen Sie dazu den IN BOOLEAN MODE
hinzu Modifikator für Ihre Abfrage.
Im booleschen Modus können Sie Operatoren wie +
verwenden und -
um anzugeben, ob ein bestimmtes Wort oder eine Phrase vorhanden sein muss oder nicht.
Im folgenden Beispiel stelle ich jedem Wort ein Pluszeichen voran (+
), um anzugeben, dass beide Wörter vorhanden sein müssen.
SELECT title, description FROM film WHERE MATCH(title, description) AGAINST('+Saga +Moose' IN BOOLEAN MODE) LIMIT 3;
Ergebnis:
+------------------------+---------------------------------------------------------------------------------------------+ | title | description | +------------------------+---------------------------------------------------------------------------------------------+ | CAPER MOTIONS | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MySQL Convention | | DATE SPEED | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MySQL Convention | | DELIVERANCE MULHOLLAND | A Astounding Saga of a Monkey And a Moose who must Conquer a Butler in A Shark Tank | +------------------------+---------------------------------------------------------------------------------------------+
Im nächsten Beispiel ändere ich eines der Pluszeichen in ein Minuszeichen (-
). Das bedeutet, dass nur die Zeilen angezeigt werden, die das Wort Saga
enthalten werden zurückgegeben, aber nur, wenn sie es nicht tun enthalten auch Moose
:
SELECT title, description FROM film WHERE MATCH(title, description) AGAINST('+Saga -Moose' IN BOOLEAN MODE) LIMIT 3;
Ergebnis:
+------------------+-------------------------------------------------------------------------------------------------+ | title | description | +------------------+-------------------------------------------------------------------------------------------------+ | AIRPLANE SIERRA | A Touching Saga of a Hunter And a Butler who must Discover a Butler in A Jet Boat | | ALASKA PHANTOM | A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia | | ARMY FLINTSTONES | A Boring Saga of a Database Administrator And a Womanizer who must Battle a Waitress in Nigeria | +------------------+-------------------------------------------------------------------------------------------------+
Das Minuszeichen wird verwendet, um Ergebnisse auszuschließen, die sonst zurückgegeben würden. Wenn also allen unseren Suchwörtern ein Minuszeichen vorangestellt ist, wird ein leerer Satz zurückgegeben.
SELECT title, description FROM film WHERE MATCH(title, description) AGAINST('-Saga -Moose' IN BOOLEAN MODE) LIMIT 3;
Ergebnis:
Empty set (0.00 sec)
Es gibt viele weitere Operatoren, die mit booleschen Suchen verwendet werden können, wie z. B. ~
, <
, >
, *
, und mehr. Ausführlichere Informationen zur Verwendung des booleschen Modus finden Sie in der MySQL-Dokumentation für boolesche Volltextsuchen.
Beispiel 9 – Mit blinder Abfrageerweiterung
Sie können den WITH QUERY EXPANSION
verwenden oder IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
Modifikatoren, um eine blinde Abfrageerweiterung durchzuführen. Dies kann nützlich sein, wenn der Suchbegriff sehr kurz ist und die zurückgegebenen Ergebnisse zu eng sein könnten (wodurch potenziell relevante Dokumente ausgeschlossen werden).
Die Abfrageerweiterung kann die Suche erweitern, indem Zeilen zurückgegeben werden, die andernfalls nicht zurückgegeben würden. Insbesondere wenn eine nicht übereinstimmende Zeile Wörter enthält, die auch in einer übereinstimmenden Zeile enthalten sind, könnte diese nicht übereinstimmende Zeile zu einer übereinstimmenden Zeile werden. Mit anderen Worten, eine nicht übereinstimmende Zeile kann immer noch zurückgegeben werden, einfach weil sie andere Wörter mit einer übereinstimmenden Zeile teilt.
Zur Veranschaulichung hier eine normale Suche ohne Abfrageerweiterung:
SELECT AlbumId, AlbumName FROM Albums WHERE MATCH(AlbumName) AGAINST('Blue' IN NATURAL LANGUAGE MODE);
Ergebnis:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 13 | Blue Night | +---------+------------+
Ich habe ausdrücklich IN NATURAL LANGUAGE MODE
angegeben aber dies ist der Standardmodus, also hätte ich diesen Modifikator auch weglassen können, wenn ich wollte.
Und hier ist die gleiche Suche mit Abfrageerweiterung:
SELECT AlbumId, AlbumName FROM Albums WHERE MATCH(AlbumName) AGAINST('Blue' WITH QUERY EXPANSION);
Ergebnis:
+---------+-----------------+ | AlbumId | AlbumName | +---------+-----------------+ | 13 | Blue Night | | 19 | All Night Wrong | +---------+-----------------+
In diesem Fall werden zwei Ergebnisse zurückgegeben. Beachten Sie, dass das zweite Ergebnis den Suchbegriff nicht enthält (blue
). Aber es enthält das Wort Night
was auch im ersten Ergebnis steht. Die erweiterte Abfrage hält dies also für gut genug, um eine Übereinstimmung zu erzielen.
Albumnamen sind wahrscheinlich kein sehr guter Anwendungsfall für den Abfrageerweiterungsmodus. Ein besserer Anwendungsfall wäre beispielsweise eine Suche nach Datenbank , wobei eine erweiterte Abfrage möglicherweise auch Dokumente zurückgibt, die Namen wie MySQL enthalten , Oracle , usw., auch wenn sie den Ausdruck database nicht enthalten .
Hier ist ein weiteres Beispiel. In diesem Beispiel werden jedoch doppelte Anführungszeichen verwendet, um anzugeben, dass der gesamte Suchbegriff vorhanden sein soll.
Wenn wir die Suche ohne durchführen Abfrageerweiterung:
SELECT title, description FROM film WHERE MATCH(title, description) AGAINST('"Feminist And a Mad Scientist"') LIMIT 3;
Ergebnis:
+------------------+--------------------------------------------------------------------------------------------------+ | title | description | +------------------+--------------------------------------------------------------------------------------------------+ | ACADEMY DINOSAUR | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies | +------------------+--------------------------------------------------------------------------------------------------+
Es wird nur ein Ergebnis zurückgegeben (es ist das einzige Ergebnis, das den gesamten Ausdruck genau so enthält, wie er eingegeben wurde).
Aber wenn wir eine blinde Abfrageerweiterung verwenden, passiert Folgendes:
SELECT title, description FROM film WHERE MATCH(title, description) AGAINST('"Feminist And a Mad Scientist"' WITH QUERY EXPANSION) LIMIT 3;
Ergebnis:
+--------------------+------------------------------------------------------------------------------------------------------+ | title | description | +--------------------+------------------------------------------------------------------------------------------------------+ | ACADEMY DINOSAUR | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies | | DINOSAUR SECRETARY | A Action-Packed Drama of a Feminist And a Girl who must Reach a Robot in The Canadian Rockies | | VICTORY ACADEMY | A Insightful Epistle of a Mad Scientist And a Explorer who must Challenge a Cat in The Sahara Desert | +--------------------+------------------------------------------------------------------------------------------------------+
Die erste Zeile ist die gleiche wie ohne die Abfrageerweiterung. Die Abfrage geht dann jedoch und gibt Zeilen zurück, die nur Teile unseres Suchbegriffs enthalten. Dieses Ergebnis ist nur auf drei begrenzt, weil ich LIMIT 3
verwendet habe . Die tatsächlichen Ergebnisse sind viel größer:
SELECT COUNT(*) FROM film WHERE MATCH(title, description) AGAINST('"Feminist And a Mad Scientist"' WITH QUERY EXPANSION);
Ergebnis:
+----------+ | COUNT(*) | +----------+ | 1000 | +----------+
Es ist durchaus möglich, dass viele dieser Ergebnisse für den Suchbegriff völlig irrelevant sind. Daher funktioniert die blinde Sucherweiterung normalerweise am besten für kürzere Suchbegriffe.
Weitere Informationen zur Verwendung von blinder Abfrageerweiterung finden Sie in der MySQL-Dokumentation:Volltextsuche mit Abfrageerweiterung.