1. Einleitung Heute hat mich ein Kollege gefragt, wie man mit MySQL eine Volltextsuchfunktion ähnlich ElasticSearch implementieren und die Suchbegriffe auswerten kann. Mir ging sofort eine Frage durch den Kopf? Warum nicht einfach „es“ verwenden? Einfach, benutzerfreundlich und schnell. Er sagte jedoch, dass die Datenmenge nicht groß sei, die vom Client zur Verfügung gestellte Zeit sehr begrenzt sei und keine Zeit zum Erstellen von ES bleibe. Schauen wir uns also die Volltextsuchfunktion von MySQL an! Ab Version 5.7.6 verfügt MySQL über einen integrierten Ngram-Volltextparser zur Unterstützung der chinesischen, japanischen und koreanischen Wortsegmentierung. Vor MySQL 5.7.6 unterstützte die Volltextindizierung nur die englische Volltextindizierung, nicht die chinesische Volltextindizierung. Es war notwendig, einen Wortsegmentierer zu verwenden, um die chinesischen Absätze in Wörter vorzuverarbeiten und sie dann in der Datenbank zu speichern. Dieser Artikel wurde mit Mysql 5.7.6, InnoDB-Datenbank-Engine, getestet. MySQL-Volltextsuche 2. Volltextparser ngram Ein N-Gramm ist eine Folge von n aufeinanderfolgenden Wörtern in einem Text. Der Ngram-Volltextparser kann Text in Wörter segmentieren, wobei jedes Wort eine Folge von n aufeinanderfolgenden Wörtern ist. n=1: 'du', 'gut', 'Welt', 'Welt' n=2: ‚Hallo‘, ‚Gute Welt‘, ‚Welt‘ n=3: ‚Hallo Welt‘, ‚Gute Welt‘ n=4: 'Hallo Welt' MySQL verwendet die globale Variable ngram_token_size, um die Größe von n in ngram zu konfigurieren. Ihr Wertebereich reicht von 1 bis 10, und der Standardwert ist 2. Normalerweise wird ngram_token_size auf die Mindestanzahl der abzufragenden Wörter eingestellt. Wenn Sie nach einzelnen Wörtern suchen müssen, setzen Sie ngram_token_size auf 1. Mit dem Standardwert 2 liefert die Suche nach einem einzelnen Wort keine Ergebnisse. Da ein chinesisches Wort aus mindestens zwei Zeichen besteht, wird der Standardwert 2 empfohlen. Werfen wir einen Blick auf die Standard-ngram_token_size von MySQL: Variablen wie „ngram_token_size“ anzeigen Es gibt zwei Möglichkeiten, die Variable ngram_token_size festzulegen: 1. Geben Sie beim Starten des mysqld-Befehls an mysqld --ngram_token_size=2 2. Ändern Sie die MySQL-Konfigurationsdatei [mysqld] ngram_token_size=2 3. Volltextindex Am Beispiel von Dokumentdaten wird eine neue Datentabelle t_wenshu erstellt, ein Volltextindex für das Dokumentinhaltsfeld erstellt und 100.000 Testdaten importiert. 1. Erstellen Sie beim Erstellen einer Tabelle einen Volltextindex Tabelle erstellen `t_wenshu` ( `Provinz` varchar(255) DEFAULT NULL, `caseclass` varchar(255) DEFAULT NULL, `Fallnummer` varchar(255) DEFAULT NULL, `caseid` varchar(255) DEFAULT NULL, `Typen` varchar(255) DEFAULT NULL, `Titel` varchar(255) DEFAULT NULL, `Inhalt` Langtext, `updatetime` varchar(255) DEFAULT NULL, VOLLTEXT-SCHLÜSSEL `content` (`content`) MIT PARSER `ngram` )ENGINE=InnoDB STANDARD-CHARSET=utf8; 2. Durch die Methode „Tabelle ändern“ ALTER TABLE t_wenshu ADD FULLTEXT INDEX content_index (Inhalt) MIT PARSER ngram; 3. Durch die Methode „Index erstellen“ ERSTELLEN SIE EINEN VOLLSTÄNDIGEN TEXTINDEX content_index AUF t_wenshu (Inhalt) MIT PARSER ngram; 4. Suchmodus Natürliche Sprachsuche (IM NATÜRLICHEN SPRACHMODUS) Der natürliche Sprachmodus 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“. Boolesche Suche (IM BOOLEAN-MODUS) Eliminieren Sie Wörter, die in mehr als der Hälfte der übereinstimmenden Zeilen vorkommen. Wenn beispielsweise jede Zeile das Wort „dieses“ enthält, werden bei der Suche mit „diesem“ keine Ergebnisse gefunden. Dies ist sehr nützlich, wenn eine große Anzahl von Datensätzen vorhanden ist, da die Datenbank der Ansicht ist, dass es sinnlos ist, alle Zeilen zu finden. In diesem Fall wird „dieses“ fast als Stoppwort betrachtet. Operatoren können im Booleschen Suchmodus verwendet werden, um komplexe Abfragen zu unterstützen, z. B. um anzugeben, dass ein Schlüsselwort vorkommen muss oder nicht vorkommen darf oder ob die Schlüsselwortgewichtung hoch oder niedrig ist.
Abfrageerweiterungssuche Hinweis: (MIT ABFRAGE-ERWEITERUNG) Da die Abfrage-Erweiterung viele irrelevante Abfragen liefern kann, verwenden Sie sie mit Vorsicht! 5. Suchanfrage 1) Abfrage der Datensätze, deren Inhalt "Diebstahl" enthält. Die Abfrageanweisung lautet wie folgt Wählen Sie CaseID, Inhalt, MATCH (Inhalt) GEGEN („Diebstahl“) als Punktzahl aus t_wenshu, wobei MATCH (Inhalt) GEGEN („Diebstahl“ im Modus „NATÜRLICHE SPRACH“). 2) Suchen Sie nach Datensätzen, die im Inhalt "挑交惹事" enthalten. Die Abfrageanweisung lautet wie folgt Wählen Sie Case-ID, Inhalt, VERGLEICH (Inhalt) GEGEN (,,寻怨惹事‘) als Punktzahl von t_wenshu, wobei VERGLEICH (Inhalt) GEGEN (,,寻怨惹事‘ IM NATÜRLICHEN SPRACHMODUS); 3) Einzelnes chinesisches Zeichen, Suche nach Datensätzen, deren Inhalt "我" enthält. Die Abfrageanweisung lautet wie folgt Wählen Sie Case-ID, Inhalt, VERGLEICH (Inhalt) GEGEN (,我‘) als Punktzahl von t_wenshu, wobei VERGLEICH (Inhalt) GEGEN (,我‘ IM NATÜRLICHEN SPRACHMODUS); Hinweis: Weil der Wert der globalen Variable ngram_token_size auf 2 gesetzt ist. Wenn Sie ein einzelnes chinesisches Zeichen abfragen möchten, müssen Sie ngram_token_size = 1 in der Konfigurationsdatei my.ini ändern und den mysqld-Dienst neu starten. Ich werde das hier nicht versuchen. 4) Der Inhalt des Abfragefeldes enthält die Begriffe „gefährliches Fahren“ und „Streit anfangen und Ärger provozieren“ wie folgt: Wählen Sie Fall-ID, Inhalt, VERGLEICH (Inhalt) GEGEN („+gefährliches Fahren+Streit anfangen und Ärger provozieren“) als Punktzahl aus t_wenshu, wobei VERGLEICH (Inhalt) GEGEN („+gefährliches Fahren+Streit anfangen und Ärger provozieren“ IM BOOLEANISCHEN MODUS); 5) Der Inhalt des Abfragefelds enthält „gefährliches Fahren“, aber nicht „Streit anfangen und Ärger provozieren“, und zwar wie folgt: Wählen Sie CaseID, Inhalt, MATCH (Inhalt) GEGEN („+gefährliches Fahren – Streit anzetteln und Ärger provozieren“) als Punktzahl aus t_wenshu, wobei MATCH (Inhalt) GEGEN („+gefährliches Fahren – Streit anzetteln und Ärger provozieren“ im Booleschen Modus); 6) Der Inhalt des Abfragefeldes enthält „gefährliches Fahren“ oder „Streit anfangen und Ärger provozieren“ wie folgt: Wählen Sie Case-ID, Inhalt, MATCH (Inhalt) GEGEN („Gefährliches Fahren und Ärger provozieren“) als Punktzahl aus t_wenshu, wobei MATCH (Inhalt) GEGEN („Gefährliches Fahren und Ärger provozieren“ im Booleschen Modus); VI. Fazit 1) Informieren Sie sich über den Supportstatus der einzelnen Versionen, bevor Sie die MySQL-Volltextindizierung verwenden. 2) Die Volltextindizierung ist N-mal schneller als + %, aber es kann zu Genauigkeitsproblemen kommen; 3) Wenn eine große Datenmenge vollständig indiziert werden muss, wird empfohlen, zuerst die Daten hinzuzufügen und dann den Index zu erstellen. 4) Für Chinesisch können Sie MySQL 5.7.6 oder spätere Versionen oder Plug-Ins von Drittanbietern wie Sphinx und Lucene verwenden. 5) Der von der Funktion MATCH() verwendete Feldname muss mit dem beim Erstellen des Volltextindex angegebenen Feldnamen übereinstimmen und kann nur aus Feldern derselben Tabelle bestehen und darf nicht tabellenübergreifend sein. Dies ist das Ende dieses Artikels über MySQL-Volltextsuche und Keyword-Bewertung. Weitere relevante Inhalte zu MySQL-Volltextsuche und Keyword-Bewertung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Allgemeine Array-Operationen in JavaScript
>>: Ubuntu startet den Remote-Anmeldevorgang des SSH-Dienstes
Bibliotheksbetrieb Abfrage 1.SHOW DATABASE; ----A...
Manchmal müssen wir bei unserer tatsächlichen Arb...
In früheren Blogbeiträgen habe ich mich auf einige...
Vorwort Reduce ist eine der neuen herkömmlichen A...
Inhaltsverzeichnis Vorwort Motivation für Fragmen...
Ich möchte kürzlich einen Docker für Cron-geplant...
Inhaltsverzeichnis Erster Blick-Index Das Konzept...
Detaillierte Erklärung des Linux-Touch-Befehls: 1...
Inhaltsverzeichnis Technologie-Stack Wirkung anal...
Um den Lastenausgleich zu verstehen, müssen Sie s...
Wenn die Rahmenlänge früher kleiner als der Conta...
Die Bildintegrationstechnologie, die von YAHOO in...
Verwenden Sie auto.js, um den täglichen Check-in ...
Würmer replizieren sich, wie der Name schon sagt,...
Die Verwendung von Schriftarten im Web ist sowohl ...