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

Detailliertes Tutorial zur Verwendung des Befehls xargs unter Linux

Hallo zusammen, ich bin Liang Xu. Sind Sie bei de...

3 Funktionen der toString-Methode in js

Inhaltsverzeichnis 1. Drei Funktionen der toStrin...

Detaillierte Erklärung und Zusammenfassung der URL zur Datenbankverbindung

Detaillierte Erklärung und Zusammenfassung der UR...

Detaillierte Einführung in die Linux-Hostnamenkonfiguration

Inhaltsverzeichnis 1. Konfigurieren Sie den Linux...

Der Unterschied zwischen MySQL count(1), count(*) und count(field)

Inhaltsverzeichnis 1. Erster Blick auf COUNT 2. D...

CSS-Tutorial: CSS-Attribut-Medientyp

Eines der wichtigsten Merkmale eines Stylesheets ...

Erstellen Sie einen hochverfügbaren MySQL-Cluster mit Dual-VIP

Inhaltsverzeichnis 1. Projektbeschreibung: 2. Pro...

Verschachtelte Verwendungsoperation für MySQL-Aggregatfunktionen

Zweck: Verschachtelte Verwendung von MySQL-Aggreg...

So weisen Sie Feldern bei der MySQL-Abfrage Standardwerte zu

brauchen Wenn Sie ein Feld abfragen, müssen Sie e...

Beispiel für die Anpassung von rem an mobile Geräte

Vorwort Überprüfung und Zusammenfassung von REM-A...