Handbuch zur MySQL-Volltextindizierung

Handbuch zur MySQL-Volltextindizierung

Die Volltextindizierung erfordert eine spezielle Abfragesyntax. Die Volltextsuche kann mit oder ohne Index durchgeführt werden, die Existenz eines Indexes erhöht jedoch die Übereinstimmungsgeschwindigkeit. Der Index des Volltextindex wird in einer speziellen Struktur gespeichert, um das Auffinden des Inhalts zu erleichtern, der dem Suchbegriff im Dokument entspricht. Die in unserem Alltag am häufigsten genutzte Volltextsuche erfolgt über die Internetsuchmaschine. Obwohl die Datenmenge in Websuchmaschinen sehr groß ist und üblicherweise keine relationalen Datenbanken verwendet werden, sind die Prinzipien ähnlich.

Die Volltextindizierung unterstützt den zeichenbasierten Abruf (Spalten vom Typ CHAR, VARCHAR und TEXT) und unterstützt auch den natürlichen Sprachmodus (Natural Language Mode, Standard) und den Booleschen Modus (Boolean Mode). Wenn wir beispielsweise nach „Datenbank-Engine“ suchen, werden Inhalte abgerufen, die „Datenbank“, „Engine“ und „Datenbank-Engine“ enthalten. Die Implementierung der Volltextindizierung weist zahlreiche Einschränkungen auf und ist sehr komplex. Da es jedoch in den MySQL-Server integriert ist und die Anforderungen vieler Anwendungen erfüllen kann, wird es häufig verwendet.

In Versionen vor MySQL 5.6 unterstützte nur die MyISAM-Speicher-Engine die Volltextindizierung. Um einen Volltextindex zu erstellen, müssen Sie eine Spalte angeben, die als Volltextindex markiert werden soll, beispielsweise die Inhaltsspalte unten.

Tabelle erstellen t_news (
	id INT UNSIGNED AUTO_INCREMENT NICHT NULL PRIMARY KEY,
	Inhalt TEXT,
	Autor VARCHAR(32),
	Titel VARCHAR(128),
  VOLLTEXT (Inhalt)
)ENGINE=InnoDB;

Vor MySQL 5.6 war die Unterstützung für die chinesische Suche nicht sehr gut. Sie mussten die Wortsegmentierung selbst durchführen und die Absätze dann vorab in Wörter verarbeiten, bevor Sie sie in der Datenbank speicherten. MySQL 5.7.6 und höher hatten einen integrierten Wortsegmentierer, ngram. Ngram unterstützt das Festlegen der Länge von Wortsegmenten, wodurch Chinesisch entsprechend der Länge in verschiedene Wörter aufgeteilt werden kann (obwohl dies nicht sehr intelligent ist, erfüllt es die meisten Szenarien). Sie können die Länge der Wortsegmentierung über die globale MySQL-Variable ngram_token_size festlegen. Der Standardwert ist 2 und unterstützt Optionen von 1 bis 10. Für das obige Beispiel müssen Sie einen Wörtertrenner angeben, um einen Volltextindex zu erstellen.

Tabelle erstellen t_news (
  id INT UNSIGNED AUTO_INCREMENT NICHT NULL PRIMARY KEY,
	Inhalt TEXT,
	Autor VARCHAR(32),
	Titel VARCHAR(128),
  VOLLTEXT-SCHLÜSSEL idx(Inhalt) MIT PARSER ngram
)ENGINE=InnoDB;

Fügen Sie einen Datentest ein.

INSERT INTO `t_news` 
(`id`, `Inhalt`, `Autor`, `Titel`) 
WERTE ('1', 'Ich habe eine Datenbank und eine Engine', 'Programmierer auf der Insel', 'Datenbank-Engine');

Bei einer einfachen Fuzzy-Suche kann diese mit LIKE vervollständigt werden, während bei einer Volltextsuche folgende Anweisung verwendet werden muss:

Wählen Sie * aus t_news 
WHERE MATCH (Inhalt) GEGEN ('Daten-Engine' IM NATÜRLICHEN SPRACHMODUS)

Auf diese Weise können Sie den gerade eingefügten Inhalt wieder abrufen, was mit „LIKE“ nicht möglich ist. Es unterstützt auch das Sortieren nach Relevanz und das Einfügen eines weiteren Datenelements:

INSERT INTO `t_news`
(`id`, `Inhalt`, `Autor`, `Titel`) 
VALUES (2, 'Ich habe eine Datenbank', 'Programmierer auf der Insel', 'Datenbank')

Führen Sie dann eine Sortierabfrage durch:

SELECT *, MATCH (Inhalt) AGAINST ('Daten-Engine') AS Relevanz
VON t_news 
WHERE MATCH (Inhalt) AGAINST ('Daten-Engine') 
ORDER BY Relevanz ASC

Hierbei werden die passenden Werte als Spalte abgefragt, um diese anhand ihrer Aliase sortieren zu können. Je höher die Korrelation, desto größer ist der entsprechende Relevanzwert und kann somit zur Sortierung herangezogen werden. Wenn die Investition irrelevant ist, beträgt der Relevanzwert 0.

Der Boolesche Modus ermöglicht mehr Kontrolle, z. B. die Verwendung von + zum Beibehalten übereinstimmender Ergebnisse und - zum Ausschließen übereinstimmender Ergebnisse. Das Folgende gleicht die Daten ab, schließt jedoch die Daten aus, die die Engine enthalten. Weitere Operatoren finden Sie in der offiziellen MySQL-Dokumentation: Volltextindexoperatoren.

Wählen Sie * aus t_news 
WO MATCH (Inhalt) GEGEN ('+data*-engine' IM BOOLEAN-MODUS);

Oben finden Sie den detaillierten Inhalt des MySQL-Volltextindex-Nutzungshandbuchs. Weitere Informationen zum MySQL-Volltextindex finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Die Prinzipien und Mängel der MySQL-Volltextindizierung
  • Was ist schneller: MySQL-Volltextindex, gemeinsamer Index, Like-Abfrage und JSON-Abfrage?
  • MySQL-Volltextindex, um eine einfache Version des Suchmaschinen-Beispielcodes zu erreichen
  • MySQL ermöglicht die gemeinsame Nutzung von Volltextindizes
  • Ein kurzes Tutorial zur MySQL-Volltextindexanwendung
  • Vertieftes Verständnis basierend auf dem MySQL-Volltextindex

<<:  Beispielcode des Vue-Symbolselektors

>>:  Tiefgreifendes Verständnis der Verwendung von CSS clear:both

Artikel empfehlen

In diesem Artikel erfahren Sie mehr über NULL in MySQL

Inhaltsverzeichnis Vorwort NULL in MySQL 2 NULL b...

Tipps zum Implementieren mehrerer Rahmen in CSS

1. Mehrere Grenzen[1] Hintergrund: Box-Shadow, Um...

Ubuntu16.04 Installation mysql5.7.22 Grafik-Tutorial

Installations-Tutorial für VMware12.0+Ubuntu16.04...

Eine kurze Zusammenfassung aller Kapselungsmethoden in Vue

Inhaltsverzeichnis 1. Kapselungs-API 2. Globale T...

Wann ist die Verwendung von dl, dt und dd sinnvoll?

dl: Definitionsliste Definitionsliste dt: Definiti...

Erläuterung des React+TypeScript-Projektaufbaufalls

Das Erstellen eines React-Projekts kann sehr einf...

JavaScript ermittelt, ob der Browser IE ist

Als Frontend-Entwickler komme ich an den Tücken d...

Ein Beispiel für die Berechnungsfunktion calc in CSS im Website-Layout

calc ist eine Funktion in CSS, die zum Berechnen ...

Implementierung der Nginx-Domänennamenweiterleitung für den HTTPS-Zugriff

Ein Wort vorab: Plötzlich erhielt ich die Aufgabe...

Einführung in general_log-Protokollwissenspunkte in MySQL

Die folgenden Funktionsdemonstrationen basieren a...

Übung zum Hochladen von Element-Avataren

Dieser Artikel verwendet die offizielle Element-W...

Eine Sammlung möglicher Probleme bei der Migration von SQLite3 nach MySQL

Kurzbeschreibung Passend für Leser: Mobile Entwic...