


PHP MYSQL implementiert die Volltextsuche und Volltextsuchtools
Wie verwende ich PHP, um die Volltextsuchfunktion zu implementieren?
Viele Leute können vielleicht sofort mehrere Lösungen finden, wie zum Beispiel: Dateiabrufmethode, Verwendung einer SQL-ähnlichen Anweisung usw., aber diese Methoden sind ziemlich ineffizient.
Hier stellen wir eine relativ effiziente Methode zur Implementierung des PHP-Volltextabrufs vor, nämlich die Verwendung des FULLTEXT-Feldtyps von MYSQL. Allerdings unterstützt das FULLTEXT-Feld von MYSQL Chinesisch nicht sehr gut. In diesem Artikel wird auch beschrieben, wie die chinesische Volltextsuchfunktion über PHP MYSQL implementiert wird.
Zunächst müssen Sie ein PHP-Erweiterungsmodul für die chinesische Wortsegmentierung verwenden? SCWS Informationen zur Installation und Verwendung dieses Moduls finden Sie unter www.ftphp.com/scws (bitte hinterlassen Sie eine Seite). Nachricht, wenn Sie Fragen haben).
Dann werfen Sie einen Blick auf die relevanten Informationen zum Volltextfeldtyp von MySQL:
MySQL-Versionen nach 3.23.23 beginnen, die Volltextindizierung und -suche zu unterstützen. Der Volltextindex in MySQL ist ein Index vom Typ FULLTEXT.
FULLTEXT-Indizes werden für MyISAM-Tabellen verwendet und können für CHAR-, VARCHAR- oder TEXT-Spalten bei oder nach CREATE TABLE mit ALTER TABLE oder CREATE INDEX erstellt werden. Bei großen Datenbanken ist es sehr schnell, die Daten in eine Tabelle ohne FULLTEXT-Index zu laden und dann mit ALTER TABLE (oder CREATE INDEX) den Index zu erstellen. Das Laden von Daten in eine Tabelle, die bereits über einen FULLTEXT-Index verfügt, ist sehr langsam.
Die MYSQL-Volltextsuche wird über die Funktion MATCH() abgeschlossen.
Das Folgende ist ein einfaches Beispiel:
1. Erstellen Sie eine neue Datentabelle:
CREATE TABLE fulltext_sample(copy TEXT,FULLTEXT(copy)) TYPE=MyISAM;
Die Kopie hier ist ein Feld vom Typ Volltext Beim Erstellen der Tabelle hinzugefügt, kann auch über eine Warnung hinzugefügt werden, z. B.:
ALTER TABLE fulltext_sample ADD FULLTEXT(copy)
2. Daten einfügen:
INSERT INTO fulltext_sample VALUES ('It appears good from here'), ('The here and the past'), ('Why are we hear'), ('An all-out alert'), ('All you need is love'), ('A good alert');
3. Datenabruf:
SELECT * FROM fulltext_sample WHERE MATCH(copy) AGAINST('love');
Das Obige ist die Volltextsuchfunktion von MySQL. Hinweis: Bei der Suche im Volltextindex wird die Groß-/Kleinschreibung nicht beachtet.
Sehen wir uns an, wie man die chinesische Volltextsuche implementiert.
Das Volltextfeld basiert auf Wörtern, und Wörter müssen durch Leerzeichen getrennt werden. In chinesischen Sätzen werden Wörter jedoch nicht durch Leerzeichen getrennt, daher müssen wir chinesische Wörter segmentieren, weshalb das Obige erforderlich ist Wörter verwenden Sie das Erweiterungsmodul für die chinesische Wortsegmentierung.
Trotz der Segmentierung chinesischer Wörter kann MYSQL jedoch immer noch keinen Volltextabruf von Chinesisch über MATCH erreichen. Dies erfordert die Konvertierung einer bestimmten Methode. Eine relativ einfache und praktische Methode ist die Verwendung der folgenden Funktion (natürlich gibt es bessere). ones ), das Chinesisch in URL-Code umwandelt.
function q_encode($str) { $data = array_filter(explode(" ",$str)); $data = array_flip(array_flip($data)); foreach ($data as $ss) { if (strlen($ss)>1 ) $data_code .= str_replace("%","",urlencode($ss)) . " "; } $data_code = trim($data_code); return $data_code; }
Speichern Sie den konvertierten Inhalt im vordefinierten Volltextfeld. Ebenso müssen bei der Abfrage die Abfrageschlüsselwörter auf die gleiche Weise konvertiert werden.
Wie implementiert man die UTF8-Volltextsuche in PHP Mysql
In diesem Artikel wird erklärt, wie man schnell eine Volltextsuche in großen Datenmengen durchführt? MySQL bietet eine Volltextindexfunktion, das heißt, das FULLTEXT-Indexattribut für das Feld festzulegen und dann die MATCH AGAINST-Anweisung von SELECT zu durchsuchen.
Eine von uns entwickelte rein englische Website TouchUs – The Global Yellow Pages & Business Directory (www.touchus.org) nutzt diese Funktion von MySQL, um eine durchschnittliche Volltext-Abrufzeit für mehr als 100.000 Daten zu erreichen. Weniger als 0,5 Sekunden. Bei der Entwicklung der chinesischen Website von TouchUs – City Yellow Pages (www.city39.cn) stießen wir jedoch auf neue Probleme. Es stellt sich heraus, dass im englischen Schriftsatz Wörter durch Leerzeichen unterschieden werden, was FULLText jedoch vollständig unterstützen kann. Bei chinesischen oder ostasiatischen Texten ist dies jedoch nicht so einfach, da es keine offensichtliche Trennung zwischen chinesischen Wörtern gibt und MySQL daher keine vollständige Unterstützung bietet. Textsuche mit chinesischen Schriftzeichen.
Wie kann MySQL auch die chinesische Volltextsuche unterstützen? Durch Zufall entstand die Idee, dass es nach der Segmentierung chinesischer Wörter möglich sei, chinesische Zeichen in englische Zeichen zu kodieren, um so eine spezifische Verbindung zwischen Chinesisch und Englisch herzustellen und dann eine Volltextsuche durchzuführen Können chinesische Schriftzeichen nicht erkannt werden? Ist der Volltext indiziert? Nach dem Test lautet die Antwort ja. Das Folgende ist der spezifische Prozess, der im City Yellow Pages-Netzwerk implementiert ist:
1 Erstellen Sie eine separate Indextabelle, z. B. entsprechend der Mitgliedertabelle, wir erstellen eine Mitgliederindextabelle.
Benutzerinformationstabelle (Mitglieder) Benutzerinformations-Volltextindextabelle (members_index)
Benutzer-ID Benutzer-ID
Benutzername Volltextindex zu index_intro der Mitgliederindextabelle hinzufügen.
2. Führen Sie eine chinesische Wortsegmentierungsverarbeitung für den Inhalt des Feldes „User_introduction“ der Benutzerinformationstabelle (Mitglieder) durch
中文分词的处理过程,可以参考简易中文分词系统http://www.ftphp.com/scws/,在城市黄页网中,我们采用了scws的PHP扩展模块方式来实现中文分词。scws的php扩展模块安装非常简单,只需简单编译配置后即可使用。在具体的php代码中,我们写了如下的函数来实现分词后将分词结果用空格进行连接。
//中文分词函数 function str_fc($str) { $so = scws_new(); $so->set_charset('utf8'); // 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件 $so->send_text($str); while ($tmp = $so->get_result()) { foreach ( $tmp as $ss ){ $s = trim($ss[word]); if ( $s ) $mystr .= trim($ss[word]) . " "; //echo urlencode(trim($ss[word])) . " "; } } return $mystr; }
该函数返回就是用空格连接的分词结果。
3. 对分词结果进行编码,可以采用多种编码方式,比如base64编码、urlencode编码、汉字转拼音等,对gb2312甚至可以采用区位码编码方式。考虑到存储空间以及便利性,我们采用了PHP的urlencode编码方式。需要注意的是,在编码前,我们可以去掉重复的分词来节约存储空间,编码后要去掉编码结果中的%符号,因为urlencode采用RFC 1738???行编码,会产生很多%,而%在MySQL是通配符。下面是编码过程用到的PHP代码
$data = str_fc($data); //中文分词 $data = array_filter(explode(" ",$data)); //删除数组空项 $data = array_flip(array_flip($data)); //删除重复项 //对分词结果进行urlcode编码 foreach ( $data as $ss ) { if (strlen($ss)>1 ) $data_code .= str_replace("%","",urlencode($ss)) . " "; }
这里的$data_code就是编码后的结果。把编码结果根据user_id存入用户信息全文索
引表(members_index)
4. 在进行搜索处理时,首先对用户输入的关键字进行同样的分词编码处理,然后通过MySQL的SELECT的MATCH AGAINST语句进行全文快速检索,根据检索结的user_id即可调用用户信息表(members)中的原始数据进行显示,而没有必要进行一次解码重组。
以上MySQL UTF8中文全文检索方法.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Alipay PHP ...

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Wie debugge ich den CLI -Modus in PhpStorm? Bei der Entwicklung mit PHPSTORM müssen wir manchmal den PHP im CLI -Modus (COMS -Zeilenschnittstellen) debuggen ...

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.
