In diesem Artikel werden die Grundkenntnisse des MySQL-Volltextindex unter folgenden Aspekten vorgestellt:
Mehrere Überlegungen zum MySQL-Volltextindex
Die Syntax von Full -Textindex
Einführung in mehrere Suchtypen
Beispiele für mehrere Suchtypen
Mehrere Beispiele für Volltextindizierung Hinweise
Die Suche muss in einer Indexspalte vom Typ Volltext erfolgen und die in Übereinstimmung angegebene Spalte muss im Volltext angegeben worden sein
Kann kann nur auf Tabellen-Engines angewendet werden (MySQL 5.6 und höher können auch in der Innodb-Tabellen-Engine verwendet werden)
Sie können nur Volltextindizes für Spalten vom Typ char, varchar und text erstellen
Kann wie gewöhnliche Indizes beim Definieren der Tabelle angegeben oder nach dem Erstellen der Tabelle hinzugefügt oder geändert werden
Für das Einfügen umfangreicher Datensätze wird nach dem Einfügen von Daten in eine Tabelle ein Index erstellt ohne Index ist schneller als das Einfügen in eine Datentabelle mit Index. Der Vorgang ist viel schneller.
Die Suchzeichenfolge muss eine konstante Zeichenfolge sein, nicht der Spaltenname der Tabelle.
Wenn die Die Selektivität des Suchdatensatzes überschreitet 50 %, es wird davon ausgegangen, dass keine Übereinstimmung vorliegt (nur eingeschränkt in der natürlichen Suche)
Volltextindex-Suchsyntax
MATCH (Spaltenname 1, Spaltenname 2 ,…) GEGEN (Suchzeichenfolge [Suchmodifikator])
Die in Übereinstimmung angegebenen Spaltennamen 1, 2 usw. sind die Spaltennamen, die beim Erstellen des Volltextindex angegeben wurden. Die nachfolgenden Suchmodifikatoren werden wie folgt beschrieben:
Suchmodifikator:
{ IN NATURAL LANGUAGE MODE | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION | IN BOOLEAN MODE | WITH QUERY EXPANSION }
Einführung in mehrere Suchtypen
Die Suchmodifikatoren oben veranschaulichen tatsächlich 3 Volltextsuchen Typen
IM NATÜRLICHEN SPRACHENMODUS
Einführung: Das Standardsuchformular (ohne Suchmodifikator oder der Modifikator ist IM NATÜRLICHEN SPRACHENMODUS)
Funktionen:
Die Zeichen in der Suchzeichenfolge werden als normale Zeichen ohne besondere Bedeutung analysiert
Filtern Sie die Zeichenfolgen in der Liste der maskierten Zeichen
Wenn die Selektivität des Datensatzes 50 % überschreitet, wird dies normalerweise berücksichtigt ein Missverhältnis sein.
Die zurückgegebenen Datensätze werden nach ihrer Relevanz sortiert und angezeigt
IN BOOLEAN MODE
Einführung: Suche im Booleschen Modus (wenn der Suchmodifikator IM BOOLEAN-MODUS steht)
Funktionen:
analysiert die Bedeutung von Sonderzeichen in der Suchzeichenfolge nach bestimmten Regeln und erstellt einige logische Regeln. Zum Beispiel: Ein bestimmtes Wort muss vorkommen oder darf nicht vorkommen usw.
Die von dieser Art der Suche zurückgegebenen Datensätze werden nicht nach Relevanz sortiert
WITH QUERY EXPANSION
Einführung: Ein etwas komplexeres Suchformular, das tatsächlich zwei natürliche Suchen durchführt, kann Datensätze zurückgeben, die eine direkte Einleitung aufzeichnen Beziehungen, Modifikator IM NATÜRLICHEN SPRACHMODUS MIT ABFRAGEERWEITERUNG oder MIT ABFRAGEERWEITERUNG Modifikator
Funktionen: Diese Art der Suche bietet tatsächlich eine indirekte Suchfunktion, zum Beispiel: Ich suche nach einem bestimmten Wort und die erste zurückgegebene Zeile tut dies Das Suchwort enthält keine Zeichenfolge. Ein zweiter Abgleich kann basierend auf den Datensatzwörtern des ersten Suchergebnisses durchgeführt werden, sodass es möglich ist, übereinstimmende Datensätze mit einigen indirekten Beziehungen zu finden.
Beispiele für mehrere Suchtypen
Anwendung im NATURAL LANGUAGE MODE-Modus:
wird weiterhin auf die Produkttabelle angewendet, in der wir einen Volltextindex im Namen eingerichtet haben Da ich relevante Datensätze in der Namensspalte anhand von Schlüsselwörtern abgleichen muss
Die SQL-Anweisung lautet wie folgt:
SELECT * FROM product WHERE match(name) against(‘auto')
Die Zeit ist nicht schlecht, ich habe mehr als 10.000 Datensätze erreicht Von fast 870.000, was zeitaufwändig ist, ist der Effekt immer noch gut
Hinweis: Standardmäßig werden Datensätze basierend auf der Relevanz von hoch nach niedrig zurückgegeben
Wir können eine Übereinstimmung auswählen (name) gegen('auto') FROM Produkt Überprüfen Sie den Korrelationswert des Datensatzes. Die Werte liegen zwischen 0 und 1. 0 bedeutet, dass der Datensatz nicht übereinstimmt
Mehrere wichtige Merkmale:
1. Welche Wörter werden ignoriert?
Der Standard-Volltextindex berücksichtigt Wörter mit mehr als 4 Zeichen als gültige Wörter 🎜>Schutzwörter in der Vokabelliste. Der Standard-Volltextindex blockiert einige gebräuchliche Wörter, da diese Wörter zu häufig vorkommen und keine semantische Rolle spielen, sodass sie im Suchvorgang ignoriert werden. Selbstverständlich ist diese Liste auch konfigurierbar.
2. So führen Sie eine Wortsegmentierung durch
SELECT * FROM articles WHERE MATCH (title,body) -> AGAINST (‘+MySQL -YourSQL' IN BOOLEAN MODE);
Minuszeichen: entspricht nicht
Nein: entspricht oder
1. Es gibt keine Grenze für die Datensatzselektivität. Auch wenn die Suchergebnisse 50 % der Gesamtzahl überschreiten, werden die Ergebnisse nicht automatisch in absteigender Reihenfolge sortiert Relevanz der Datensätze
3. Ja Es wird direkt auf den Volltextindex angewendet, ohne dass Volltext erstellt wird. Dadurch wird die Abfrage jedoch sehr langsam, daher ist es besser, sie nicht zu verwenden.
4. Unterstützen Sie die minimale und maximale Wortlänge.
5. Von der booleschen Suche unterstützte Operatoren:
n Minuszeichen -: Zeigt an, dass das geänderte Wort nicht im Datensatz erscheinen darf
n Kein Operator: Das Wort ist optional, aber der Datensatz, der das Wort enthält, ist von hoher Relevanzn Doppelte Anführungszeichen " : Verwenden Sie eine Phrase als Übereinstimmung. Zum Beispiel: „ein Wort“ gleicht Wörter mit einem Wort zusammen
Hier sind einige offizielle Beispiele:
'Apfel „Banane“
muss die beiden Wörter
„Apfelsaft“ enthalten.
muss „Apfel“ enthalten. Datensätze, die „Macintosh“ enthalten, sind von hoher Relevanz und dürfen nicht „Apfel Macintosh“ enthalten.
Muss Apfel enthalten und darf nicht Macintosh sagen
'apple -macintosh'
Suche nach Datensätzen von Wörtern, die mit Apfel beginnen
'apple*'
Vollständig Passen Sie einige Wörter an
'"einige Wörter"'
Nachdem ich die Grundkenntnisse der MySQL-Volltextindizierung verstanden habe, habe ich das Gefühl, dass der Volltextindex sicherlich viel besser ist als vergleichbare, aber wenn es um Fortgeschrittene geht Suchen. Es ist immer noch etwas grob und ich mache mir Sorgen wegen Leistungsproblemen.
Ich möchte es nur als Einführung verstehen, und es ist auch eine Übersetzung einiger grundlegender Kenntnisse auf der offiziellen Website