Implementierung einer Suchmaschine auf Basis von MySQL Vorwort: Tatsächlich unterstützt MySQL die Volltextindizierung schon seit langem, allerdings nur die Suche auf Englisch. Ab Version 5.7.6 verfügt MySQL über einen integrierten Ngram-Volltextparser zur Unterstützung der chinesischen, japanischen und koreanischen Wortsegmentierung. Der MySQL-Volltextindex verwendet das Prinzip des invertierten Index. Im invertierten Index ist das Schlüsselwort der Primärschlüssel, und jedes Schlüsselwort entspricht einer Reihe von Dateien, in denen das Schlüsselwort vorkommt. Wenn ein Benutzer auf diese Weise nach einem Schlüsselwort sucht, lokalisiert das Sortierprogramm das Schlüsselwort im invertierten Index und kann sofort alle Dateien finden, die das Schlüsselwort enthalten.
1. Ngram-VolltextparserEin N-Gramm ist eine Folge von n aufeinanderfolgenden Wörtern in einem Text. Der Ngram-Volltextparser kann Text in Tokens zerlegen, wobei jedes Wort eine Folge von n aufeinanderfolgenden Wörtern ist. Verwenden Sie beispielsweise den Ngram-Volltextparser, um „你好靓仔“ zu segmentieren: n=1: 'du', 'gut', 'hübsch', 'Junge' n=2: ‚Hallo‘, ‚Sehr hübsch‘, ‚Hübscher Junge‘ n=3: ,Du bist so hübsch‘, ,Du bist so hübsch‘ n=4: ‚Hallo hübscher Junge‘ In MySQL wird die globale Variable Sie können die Standard Variablen wie „ngram_token_size“ anzeigen Es gibt zwei Möglichkeiten, den Wert der globalen Variable (1) Geben Sie beim Starten des mysqld-Kommandos an: mysqld --ngram_token_size=2 (2) Modifizieren Sie die MySQL-Konfigurationsdatei my.ini und fügen Sie am Ende eine Parameterzeile hinzu: ngram_token_size=2 2. Erstellen Sie einen Volltextindex1. Erstellen Sie beim Erstellen einer Tabelle einen VolltextindexCREATE TABLE `Artikel` ( `id` bigint NICHT NULL, `url` varchar(1024) COLLATE utf8mb4_general_ci NICHT NULL STANDARD '', `title` varchar(256) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `Quelle` varchar(32) COLLATE utf8mb4_general_ci DEFAULT '', `Schlüsselwörter` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, `publish_time` Zeitstempel NULL DEFAULT NULL, Primärschlüssel (`id`), VOLLTEXT-SCHLÜSSEL `title_index` (`title`) MIT PARSER `ngram` ) ENGINE=InnoDB STANDARD-CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; 2. Durch die Methode „Tabelle ändern“ALTER TABLE-Artikel ADD FULLTEXT INDEX title_index(Titel) MIT PARSER ngram; 3. Durch die Methode „Index erstellen“ERSTELLEN SIE EINEN VOLLSTÄNDIGEN TEXTINDEX title_index FÜR Artikel (Titel) MIT PARSER ngram; 3. Suchmethode1. Suche in natürlicher Sprache (NATURAL LANGUAGE MODE)Der Modus für natürliche Sprache ist der Standard-Volltextsuchmodus von MySQL. Der Modus für natürliche Sprache kann keine Operatoren verwenden und keine komplexen Abfragen angeben, wie etwa „Schlüsselwörter müssen vorkommen“ oder „dürfen nicht vorkommen“. Beispiel: Wählen Sie * aus dem Artikel, wo MATCH(title) AGAINST (,Beijing Tourism‘ im Modus für natürliche Sprache); // Wenn kein Modus angegeben ist, wird standardmäßig der natürliche Sprachmodus verwendet. select * from article where MATCH(title) AGAINST ('北京旅游'); Es ist ersichtlich, dass in diesem Modus bei der Suche nach „Beijing Travel“ nach Inhalten gesucht werden kann, die „Beijing“ oder „Travel“ enthalten, da die Suche auf der Grundlage der natürlichen Sprache in zwei Schlüsselwörter unterteilt ist. Im obigen Beispiel werden die zurückgegebenen Ergebnisse automatisch nach Übereinstimmungsgrad sortiert, wobei der höchste Übereinstimmungsgrad vorne steht. Der Übereinstimmungsgrad ist eine nicht negative Gleitkommazahl. Beispiel: // Überprüfen Sie den Übereinstimmungsgrad, wählen Sie *, MATCH(title) AGAINST (,Beijing Tourism‘) als Punktzahl aus dem Artikel, wobei MATCH(title) AGAINST (,Beijing Tourism‘ im Modus „NATÜRLICHE SPRACHLICH“). 2. Boolesche Suche (BOOLEAN MODE)Der Boolesche Suchmodus kann Operatoren verwenden, um komplexe Abfragen zu unterstützen, z. B. die Angabe, dass ein Schlüsselwort vorkommen muss oder nicht vorkommen darf oder ob die Schlüsselwortgewichtung hoch oder niedrig ist. Beispiel: // Kein Operator // Enthält „Dating“ oder „Strategy“ Wählen Sie * aus dem Artikel, wobei MATCH(Titel) GEGEN (,Dating Guide‘ im Booleschen Modus) gilt; // Operator verwenden // Muss „Dating“ enthalten, kann „Strategy“ enthalten Wählen Sie * aus dem Artikel, wo MATCH(Titel) GEGEN ('+Dating Guide' im Booleschen Modus); Weitere Operatorbeispiele: „Dating-Tipps“ Kein Operator, also ODER, enthält entweder "Dating" oder "Strategie" '+Dating+Strategien' Muss die beiden Wörter „+Dating-Tipps“ enthalten „Dating“ muss enthalten sein, die Übereinstimmung ist jedoch höher, wenn auch „Strategie“ enthalten ist. '+Dating-Strategie' Es muss „Datum“ enthalten und darf nicht „Strategie“ enthalten. '+Dating~Strategie' „Dating“ muss enthalten sein, wenn aber auch „Strategie“ enthalten ist, ist der Übereinstimmungswert niedriger als der Datensatz ohne „Strategie“. '+Dating+(>Strategien<Tipps)' Die Abfrage muss Datensätze für „Dating“ und „Strategien“ oder „Dating“ und „Fähigkeiten“ enthalten, aber „Dating-Strategien“ hat eine höhere Übereinstimmung als „Dating-Fähigkeiten“. 'Dating*' Die Abfrage umfasst Datensätze, die mit „Termin“ beginnen. „Dating-Tipps“ Verwenden Sie doppelte Anführungszeichen, um die zu suchenden Wörter einzuschließen. Die Wirkung ist ähnlich wie bei '%Dating Guide%'. Beispielsweise wird „Dating-Strategien für Anfänger“ abgeglichen, „Dating-Strategien“ jedoch nicht. 4. Vergleich mit LikeIm Vergleich zu ähnlichen Abfragen bietet die Volltextindizierung folgende Vorteile:
Und die Leistung der Volltextsuche ist besser als die der ähnlichen Abfrage Das Folgende ist ein Test, der auf etwa 50-W-Daten basiert: // wie Abfrageauswahl * aus Artikel, wo der Titel wie „%北京%“ aussieht; // Volltextindexabfrage select * from article where MATCH(title) AGAINST ('北京' IN BOOLEAN MODE); Es ist ersichtlich, dass die Like-Abfrage 1,536 s und die Volltextindexabfrage 0,094 s dauert, was ungefähr 16-mal schneller ist. Durch die Volltextindizierung sind schnelle Suchvorgänge möglich, allerdings ist auch die Indexpflege mit einem hohen Aufwand verbunden. Je größer die Feldlänge, desto größer ist der erstellte Volltextindex, was sich auf den Durchsatz von DML-Anweisungen auswirkt. Wenn die Datenmenge nicht groß ist, können Sie für die Suche die Volltextindizierung verwenden, was einfach und bequem ist. Wenn die Datenmenge jedoch groß ist, wird empfohlen, hierfür eine spezielle Suchmaschine ElasticSearch zu verwenden. Oben sind die Details zur Implementierung einer einfachen Suchmaschine auf MySQL-Basis beschrieben. Weitere Informationen zur Implementierung von Suchmaschinen mit MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Implementieren benutzerdefinierter Radio- und Kontrollkästchenfunktionen mit reinem CSS
>>: So passen Sie mit CSS einen schöneren Link-Prompt-Effekt an
Inhaltsverzeichnis 1. Implementierung des Zählers...
Wenn Sie nicht verstehen, was ich geschrieben hab...
Umsetzungsprinzip Die Hauptgrafik besteht aus zwe...
Inhaltsverzeichnis 1. Problem 2. Lösung 1. Deklar...
1 / Kopieren Sie die Webprojektdateien direkt in ...
Es stellt sich die Frage Diese Frage kam auf, als...
Dieser Artikel stellt hauptsächlich den Prozess d...
Nach der VIP-Konfiguration wird beim Aktiv/Standb...
Der Paging-Effekt wird zu Ihrer Information im Vu...
Einführung Haben Sie schon einmal eine Situation ...
Lassen Sie mich Ihnen zunächst den fertigen Effek...
Inhaltsverzeichnis Anwendungsszenarien So erreich...
Inhaltsverzeichnis Vorwort Erstellen einer Kompon...
Xiaobai zeichnet die Installation von vmtools auf...
Inhaltsverzeichnis Login-Geschäftsprozess Impleme...