Heim >Backend-Entwicklung >PHP-Tutorial >So führen Sie eine schnelle Fuzzy-Suche nach Spitznamen in MySQL durch

So führen Sie eine schnelle Fuzzy-Suche nach Spitznamen in MySQL durch

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-09-21 14:13:051211Durchsuche

MySQL führt eine Fuzzy-Abfrage bei der Spitznamensuche durch. Wenn es zu viele Benutzer gibt, ist die Like-Abfrage sehr langsam.

Antwortinhalt:

MySQL führt eine Fuzzy-Abfrage bei der Spitznamensuche durch. Wenn es zu viele Benutzer gibt, ist die Like-Abfrage sehr langsam.

  1. Erstellen Sie einen Index für das Spitznamenfeld in dieser Tabelle in der Datenbank

    Schlüssel `nikename`(`nikename`)

  2. Volltextindex mit SQL-Anweisung

    ALTER TABLE `user` ADD FULLTEXT `fidx_user_nikename` (`nickname`)

Anschließend fragen Sie mit der folgenden Methode ab

<code>SELECT * FROM \`user\` WHERE MATCH (nickname)AGAINST ('xxx')</code>

Wenn es wie %name% ist, gibt es meines Wissens nach keine Möglichkeit. Wenn kein % davor steht, können Sie einen Index erstellen oder die LOCATE-Funktion ausprobieren, aber das hat wahrscheinlich keine Auswirkung.

Wo ist Instr?

Verwenden Sie für die Fuzzy-Suche die Wortsegmentierung. Sphinx Coreseek oder Xunsearch (Xunsou)

Wenn Ihre MySQL-Version höher als 5.7 ist, unterstützt der integrierte Ngram-Volltextindex die chinesische Wortsegmentierung. Ich habe ihn im Projekt verwendet, und es gibt bereits Tutorials zur Verwendung online

Verwenden Sie eine Suchmaschine, um häufig gesuchte Felder zu indizieren, und verwenden Sie sie dann zusammen mit Caching

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn