Vorwort
verwenden Suche mit MATCH() ... AGAINST match() gibt an, dass die Spalte durchsucht wird, against gibt an, dass die Zeichenfolge durchsucht wird Sehen Sie sich die standardmäßige Wortsegmentierung an (verwenden Sie diese Wörter, um verschiedene Schlüsselwörter zu unterscheiden). Sie können die Wortsegmentierung auch anpassen, um verschiedene Schlüsselwörter zu unterscheiden. AUSWÄHLEN * AUS information_schema.INNODB_FT_DEFAULT_STOPWORD; wie +----------+ | Wert | +----------+ | ein | | über | | an | | sind | | als | | bei | | sein | | von | | com | | de | | de | | für | | von | Drei Arten von Volltextsuchmethoden Suche in natürlicher Sprache Übergeben Sie eine bestimmte Zeichenfolge, die mit MATCH AGAINST überprüft werden soll. Die Standardmethode Boolesche Suche Fügen Sie der Suchzeichenfolge Operatoren hinzu, z. B. bedeutet "+" muss enthalten, "-" bedeutet nicht enthalten, "*" bedeutet Platzhalter. Auch wenn die übergebene Zeichenfolge klein ist oder im Stoppwort erscheint, wird sie nicht herausgefiltert Abfrageerweiterung Suche Die Suchzeichenfolge wird verwendet, um eine Suche in natürlicher Sprache durchzuführen. Anschließend werden die Wörter aus den relevantesten Zeilen, die von der Suche zurückgegeben wurden, der Suchzeichenfolge hinzugefügt. Die Suche wird erneut ausgeführt. Die Abfrage gibt die Zeilen aus der zweiten Suche zurück. Verwandte Parameter Zugehörige Parameter konfigurieren innodb_ft_min_token_size Der Standardwert ist 3, was bedeutet, dass mindestens 3 Zeichen als Schlüsselwort verwendet werden können. Durch Erhöhen dieses Wertes kann die Größe des Volltextindexes verringert werden. innodb_ft_max_token_size Der Standardwert ist 84, was bedeutet, dass ein Schlüsselwort maximal 84 Zeichen enthalten kann. Durch die Begrenzung dieses Wertes kann die Größe des Volltextindexes reduziert werden. ngram_token_größe Der Standardwert ist 2, was bedeutet, dass zwei Zeichen als Schlüsselwort für den integrierten Wortsegmentierungsparser verwendet werden. Um beispielsweise einen Volltextindex für „abcd“ zu erstellen, lauten die Schlüsselwörter „ab“, „bc“, „cd“. Beachten Sie, dass diese drei Parameter nicht dynamisch geändert werden können. Wenn Sie diese Parameter ändern, müssen Sie den MySQL-Dienst neu starten und den Volltextindex neu erstellen. Testen Sie die InnoDB-Engine mithilfe des Volltextindex Vorbereiten 1. Ziel
2. Stellen Sie die folgenden Parameter ein, um den Festplatten-IO-Druck zu reduzieren Setzen Sie GLOBAL sync_binlog=100; GLOBAL festlegen innodb_flush_log_at_trx_commit=2; 3. Importieren Sie 1 kW-Daten, um die Volltextindizierung zu testen Die Daten stammen aus der Online-Suche Extraktionscode: iyip 4. Der Aufbau einer Artikeltabelle CREATE TABLE `Artikel` ( `id` bigint(10) NICHT NULL, `url` varchar(1024) ZEICHENSATZ latin1 NICHT NULL STANDARD '', `title` varchar(256) NICHT NULL STANDARD '', `Quelle` varchar(32) DEFAULT '' KOMMENTAR 'Wahre Quelle', `Schlüsselwörter` varchar(32) DEFAULT NULL, `publish_time` Zeitstempel NULL DEFAULT NULL, Primärschlüssel (`id`), SCHLÜSSEL `title_idx` (`Titel`) ) ENGINE=InnoDB Verwenden Sie myloader, um Testdaten in mehreren Threads zu importieren Dekomprimieren Sie zunächst die Testdaten tar -zxf mydumper_dump_article.tar.gz Zeit myloader -u $user -p $passwd -S $socket -t 32 -d /datas/dump_article -v 3 5. Gesamtdatenvolumen und Datendatei- und Indexdateigröße nach dem Datenimport SELECT COUNT(*) FROM `Artikel`; +----------+ | ANZAHL(*) | +----------+ | 10000000 | +----------+ 1 Reihe im Satz (7,85 Sek.) SELECT Tabellenname, CONCAT(FORMAT(SUM(Datenlänge) / 1024 / 1024,2),'M') AS Datenbankdatengröße, CONCAT(FORMAT(SUM(Indexlänge) / 1024 / 1024,2),'M') AS Datenbankindexgröße, CONCAT(FORMAT(SUM(Datenlänge + Indexlänge) / 1024 / 1024 / 1024,2),'G') AS `Datenbankgröße(G)`, AVG_ROW_LENGTH, Tabellenzeilen, Aktualisierungszeit FROM information_schema.tables WHERE Tabellenschema = DATENBANK() und Tabellenname='Artikel'; +------------+----------+--------------+------------+----------------+------------+---------------------+ | Tabellenname | Datenbankdatengröße | Datenbankindexgröße | Datenbankgröße(G) | DURCHSCHNITTLICHE REIHENLÄNGE | Tabellenzeilen | Aktualisierungszeit | +------------+----------+--------------+------------+----------------+------------+---------------------+ | Artikel | 3.710,00 M | 1.003,00 M | 4,60 G | 414 | 9388739 | 05.07.2019 15:31:37 | +------------+----------+--------------+------------+----------------+------------+---------------------+ Erstellen eines Volltextindexes mit der Standardmethode 1. Die Tabelle verfügt bereits über ein Schlüsselwortfeld (eine kurze Beschreibung des Artikelinhalts) und "," wird als Worttrennzeichen verwendet Wählen Sie Schlüsselwörter aus dem Artikellimit von 10 aus. +-------------------------------------------------+ | Schlüsselwörter | +-------------------------------------------------+ | NULL | | NULL | |,Ehe,Liebe| | Frisur, Seitenscheitel, Make-up, Mode | | Xiao A, | | , passende Kleidung, Frauen, Mode | | schön,weiblich| | Valentinstag, Dongguan, Frauen | | Haut, Hautpflege, Hautpflege, Nahrungsmittelernährung, Schönheit, Gesundheitspflege | | Sanlitun, Peking, Mode | +-------------------------------------------------+ 2. Suche nach einem Schlüsselwort ohne Volltextindizierung Ein vollständiger Tabellenscan ist erforderlich Wählen Sie die Anzahl (*) aus dem Artikel aus, in dem Schlüsselwörter wie „%Fashion%“ enthalten sind. +----------+ | Anzahl(*) | +----------+ | 163 | +----------+ 1 Reihe im Satz (7,56 Sek.) 3. Erstellen Sie einen Volltextindex für das Schlüsselwortfeld (mit als Wortsegment) Legen Sie innodb_ft_min_token_size in der Konfigurationsdatei my.cnf fest und starten Sie den MySQL-Dienst neu (die Mindestanzahl der als Schlüsselwort verwendeten Zeichen beträgt zwei, die Standardanzahl der als Schlüsselwort verwendeten Zeichen beträgt drei). [mysqld] innodb_ft_min_token_size=2 3.1 Festlegen benutzerdefinierter Stoppwörter (d. h. Wortsegmentierung) VERWENDEN Sie MySQL; Tabelle erstellen my_stopwords (Wert VARCHAR (30)) Engine = INNODB; EINFÜGEN IN my_stopwords(WERT) WERT (','); SETZEN SIE GLOBAL innodb_ft_server_stopword_table = "mysql/my_stopwords"; GLOBALE VARIABLEN ANZEIGEN, WO Variablenname IN('innodb_ft_min_token_size','innodb_ft_server_stopword_table'); +---------------------------------+--------------------+ | Variablenname | Wert | +---------------------------------+--------------------+ | innodb_ft_min_token_size | 2 | | innodb_ft_server_stopword_table | mysql/meine_Stoppwörter | +---------------------------------+--------------------+ 3.2 Volltextindex erstellen Tabelle ändern, Artikel Volltextindex hinzufügen, idx_full_keyword(keywords); * [ ] Abfrage OK, 0 Zeilen betroffen, 1 Warnung (1 Min. 27,92 Sek.) * [ ] Datensätze: 0 Duplikate: 0 Warnungen: 1 3.3 Der verbleibende Speicherplatz muss ausreichend sein. Die ursprüngliche Tabelle ist 4,6 G groß und der verbleibende Speicherplatz beträgt 5,7 G. Das Hinzufügen eines Volltextindex schlägt ebenfalls fehl. df -h Verwendete Dateisystemgröße Verfügbare Nutzung% Eingebunden auf /dev/vda1 7,8 G 6,3 G 1,2 G 85 % / tmpfs 1,9 G 0 1,9 G 0 % /Entwickler/shm /dev/mapper/vg_opt-lvol0 19G 12G 5,7G 68 % /Daten Es wird eine temporäre Datei mit der ursprünglichen Tabellengröße erstellt. 8,6 KB, 5. Juli, 16:19 Uhr #sql-5250_3533.frm 4,4 G, 5. Juli, 16:20 #sql-ib117-1768830977.ibd Tabelle ändern, Artikel Volltextindex hinzufügen, idx_full_keyword(keywords); FEHLER 1114 (HY000): Die Tabelle 'Artikel' ist voll 3.4 Verwenden Sie den erstellten Volltextindex, um die Häufigkeit des Auftretens eines Schlüsselworts abzufragen Die Antwortzeit für Abfragen wurde erheblich verbessert und beträgt nur noch 0,05 s. Die Verwendung von Where-Schlüsselwörtern wie „%时尚%“ dauert 7,56 s. Wählen Sie die Anzahl (*) aus dem Artikel aus, in dem die Übereinstimmung (Schlüsselwörter) mit ('%-Begriff%') übereinstimmt. +----------+ | Anzahl(*) | +----------+ | 163 | +----------+ 1 Zeile im Satz (0,05 Sek.) 3.5 Wenn Sie mehrere Schlüsselwörter gleichzeitig vollständig abgleichen müssen, verwenden Sie die boolesche Volltextsuche Gibt die Anzahl der Datensätze an, die vollständig mit „Sanlitun, Beijing“ übereinstimmen. select count(*) from article where match(keywords) against('+Sanlitun, Beijing' in boolean mode); +----------+ | Anzahl(*) | +----------+ | 1 | +----------+ 1 Zeile im Satz (0,06 Sek.) Gibt die Anzahl der Datensätze an, die mit „Sanlitun“ oder „Beijing“ übereinstimmen. select count(*) from article where match(keywords) against('Sanlitun,Beijing'); +----------+ | Anzahl(*) | +----------+ | 8 | +----------+ 1 Zeile im Satz (0,06 Sek.) 3.6 Nach dem Erstellen eines Volltextindex werden einige andere Dateien erstellt
Erstellen eines Volltextindexes mit dem Ngram-Parser 1. Erstellen Sie einen Volltextindex für das Titelfeld (dieses Feld hat keine festen Stoppwörter und verwendet den Ngram-Parser). Sie müssen ngram_token_size in der Konfigurationsdatei my.cnf festlegen (der Standardwert ist 2, 2 Zeichen als Schlüsselwörter von ngram) und den MySQL-Dienst neu starten. Hier verwenden wir den Standardwert von 2. Wählen Sie einen Titel aus dem Artikellimit 10; +-------------------------------------------------------------------+ | Titel | +-------------------------------------------------------------------+ | es ist es wert | |Kleine Show der Launchpad Jiangnan Leather Factory | |Seltener Moment hinter den Kulissen von Raw: „Mad Man“ wird hinter die Bühne getragen| |Raw: Der Sohn schrie seinen Vater an: „Du bist ein grüner Tee, Sohn.“ Er kämpfte allein gegen vier Leute.| |Vier Gruppen mit je 30 Quadratmetern liebevoll eingerichteten Kleinwohnungen, zahlreichen Bildern und Grundrissen | |Sexy rauchiges Katzenaugen-Make-up von der Nachtclub-Queen| |Big Show kritisiert The Rock Johnson | |Kleidungswissen von Girls' Generation Choi Sooyoung: Lin Yoona, Huang Miying, Kim Taeyeon und Jung Soojung| |Ausflug in die Natur in Deyang, Grillen in den Blumenfeldern| +-------------------------------------------------------------------+ 2. Erstellen Sie einen Volltextindex für das Titelfeld Tabelle ändern, Artikel Volltextindex hinzufügen, ft_index_title(Titel) mit Parser ngram; Abfrage OK, 0 Zeilen betroffen (3 Min. 29,22 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 3. Es wird ein invertierter Index erstellt (je länger das Titelfeld ist, desto größer ist der erstellte invertierte Index).
4. Suche nach einem Schlüsselwort im Titel, ohne einen Volltextindex zu erstellen Wählen Sie die Anzahl (*) aus dem Artikel mit dem Titel „%Outdoor%“ aus. +----------+ | Anzahl(*) | +----------+ | 22058 | +----------+ 1 Reihe im Satz (8,60 Sek.) Wählen Sie die Anzahl (*) aus dem Artikel aus, in dem der Titel „%Background%“ lautet. +----------+ | Anzahl(*) | +----------+ | 1142 | +----------+ 5. Verwenden Sie die Volltextindizierung, um nach einem Schlüsselwort zu suchen Die Reaktionszeit wurde erheblich verbessert Wählen Sie die Anzahl (*) aus dem Artikel aus, in dem „Titel“ mit „Outdoor“ übereinstimmt. +----------+ | Anzahl(*) | +----------+ | 22058 | +----------+ 1 Zeile im Satz (0,07 Sek.) Wählen Sie die Anzahl (*) aus dem Artikel aus, in dem der Titel „%Background%“ lautet. +----------+ | Anzahl(*) | +----------+ | 1142 | +----------+ 1 Reihe im Satz (8,31 Sek.) 6. Beachten Sie, dass Inkonsistenzen auftreten, wenn die Anzahl der Zeichen im Suchbegriff größer als 2 ist (ngram_token_size definiert die Größe) Bei einer normalen Suche beträgt die Anzahl der Datensätze, die dieses Schlüsselwort tatsächlich enthalten, 6 Wählen Sie die Anzahl (*) aus dem Artikel mit dem Titel „%公子大%“ aus. +----------+ | Anzahl(*) | +----------+ | 6 | +----------+ 1 Reihe im Satz (8,40 Sek.) Volltextsuche, die Anzahl der Datensätze mit dem Schlüsselwort beträgt 9443 Wählen Sie die Anzahl (*) aus dem Artikel aus, in dem Übereinstimmung (Titel) mit ('Titel') übereinstimmt. +----------+ | Anzahl(*) | +----------+ |9443| +----------+ 1 Zeile im Satz (0,06 Sek.) Die tatsächliche Anzahl der Datensätze, die dieses Schlüsselwort enthalten, beträgt 1 Wählen Sie die Anzahl (*) aus dem Artikel aus, dessen Titel wie „%花田自服%“ lautet. +----------+ | Anzahl(*) | +----------+ | 1 | +----------+ 1 Reihe im Satz (8,33 Sek.) Die Anzahl der Datensätze, die dieses Schlüsselwort in der Volltextsuche enthalten, beträgt 3202 Wählen Sie die Anzahl (*) aus dem Artikel aus, in dem Übereinstimmung (Titel) mit ('花田自服') übereinstimmt. +----------+ | Anzahl(*) | +----------+ | 3202 | +----------+ 1 Zeile im Satz (0,06 Sek.) abschließend
siehe InnoDB FULLTEXT-Indizes Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Beispiel für die Implementierung einer Ankerpositionierungsfunktion beim WeChat-Applet
>>: Ubuntu Docker-Installation in VMware (Containererstellung)
Hier stellen wir nur die relativ einfache Install...
Ergebnisse erzielen Implementierungscode html <...
Bereiten Sie eine CentOS6-Installationsdiskette (...
Überprüfen Sie zunächst, ob das Festplattengerät ...
Verwenden Sie apk add ansible, um den Ansible-Die...
Inhaltsverzeichnis Vorwort Fall: Nachahmung des L...
Detaillierte Analyse der Iframe-Nutzung <iframe...
transformieren und übersetzen Transformieren bezi...
Inhaltsverzeichnis Als globale Variable Variables...
Vorwort tcpdump ist ein bekanntes Befehlszeilento...
Es gibt zwei Arten von Festplatten in Linux: gemo...
Dieser Artikel stellt hauptsächlich den Kreisdiag...
Vorwort Um bei der Backend-Entwicklung zu verhind...
Manchmal kann das Thema eines Projekts nicht jede...
1. Position : fest Gesperrte Position (relativ zu...