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

Konfiguration der primären Netzwerk-Portzuordnung für Docker

Portzuordnung Wenn vor dem Start des Docker-Conta...

Zusammenfassung des fragmentierten Wissens zum Docker-Management

Inhaltsverzeichnis 1. Übersicht 2. Anwendungsbeis...

Lösung für 1067, wenn Mysql in Windows startet

Ich habe erst vor ein paar Tagen mit der Arbeit b...

JavaScript zur Implementierung des Countdowns für den SMS-Versand

In diesem Artikel wird der spezifische JavaScript...

JS implementiert den Beispielcode der Dezimalkonvertierung in Hexadezimal

Vorwort Beim Schreiben von Code stoßen wir gelege...

Unterschiede im Stundentrennzeichen zwischen Browsern

Beim Erstellen einer Webseite verwenden Sie manchm...

Beispielcode zur Implementierung des Seiten-Cachings im Vue-Mobilprojekt

Hintergrund Auf Mobilgeräten ist das Caching zwis...