Maison base de données tutoriel mysql PHP+MYSQL实现全文检索_MySQL

PHP+MYSQL实现全文检索_MySQL

Jun 01, 2016 pm 01:16 PM
如何

使用分词类库,分词类库请参见:http://www.xunsearch.com/scws/

如何使用PHP实现全文检索功能?
很多人可能马上可以想出几种方案,比如:文件检索法、采用SQL的like语句等方法,但这些方法效率都相当的低。
这里介绍一种比较高效的PHP全文检索实现方法,这就是采用MYSQL的FULLTEXT字段类型。但是MYSQL的FULLTEXT字段对中文的支持不是很好,本文也一并介绍如何通过PHP+MYSQL实现中文全文检索功能。
首先需要用到一个PHP中文分词扩展模块——SCWS,关于这个模块的安装和使用大家可以到www.ftphp.com/scws去查找相关内容(如有问题请留言)。
然后再看看mysql的fulltext字段类型的相关信息:
MySQL3.23.23之后的版本开始支持全文索引和搜索。全文索引在 MySQL 中是一个 FULLTEXT 类型索引。
FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上创建。对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE (或 CREATE INDEX) 创建索引,这将是非常快的。将数据装载到一个已经有 FULLTEXT 索引的表中,将是非常慢的。

MYSQL全文搜索通过 MATCH() 函数完成。
下面举一简单例子:
1、新建数据表:
CREATE TABLE fulltext_sample(copy TEXT,FULLTEXT(copy)) TYPE=MyISAM;
这里的copy就是一个fulltext类型的字段,如果建表的时候没有添加全文检索字段,也可以通过alert来添加,如:
ALTER TABLE fulltext_sample ADD FULLTEXT(copy)
2、插入数据:
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、数据检索:
SELECT * FROM fulltext_sample WHERE MATCH(copy) AGAINST('love');
上面就是mysql的全文检索功能,注意:在全文索引上进行搜索是不区分大小写的。

下面再看如何实现中文全文检索。
fulltext字段是以词语为单位,词语之间需要用空格隔开,而汉语的句子中各个词语之间并不会用空格隔开,因此我们需要对中文进行分词,这也就是为什么上面需要强词用到中文分词扩展模块。
但是尽管对中文进行分词,MYSQL还是不能通过MATCH来实现中文的全文检索,这需要通过一定的方法来进行转换,一个比较简单实用的方法是采用下面这个函数(当然还有更好的),它将中文进行了urlencode转换。
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;
}
将转换过后的内容保存至事先定义好的fulltext字段。同样,在查询的时候也需要将查询的关键词进行同样方法的转换。

PHP+Mysql实现UTF8全文搜索的方法

本文讲解一下如何在海量的数据中能够快速的进行全文检索呢?MySQL提供了一个全文索引功能,也就是把字段设置上FULLTEXT索引属性,然后通过SELECT的MATCH AGAINST语句进行查找。

我们开发的一个纯英文站点TouchUs - The Global Yellow Pages & Business Directory(www.touchus.org)就是利用MySQL的这一功能,实现了对十多万条数据的平均全文检索时间小于0.5秒。但是在开发TouchUs的中文网站——城市黄页网时(www.city39.cn),碰到了新的问题。原来英文排版时词和词之间是通过空格区分的,FULLText可以完全支持,但是对中文或者是东亚文字就没有这么简单了,因为中文的词和词之间并没有明显的分隔,所以MySQL不支持中文字符的全文检索。

如何让MySQL也能支持中文的全文检索呢?偶然间产生了一个思路,那就是能不能在中文分词后,通过对中文进行编码转化成英文字符,这样就在中英文间建立一个特定的联系,然后再进行全文检索,这样不就实现了中文的全文索引了吗?经过试验,答案是肯定的。下面是在城市黄页网中实现的具体过程:

1. 建立一个单独的索引表,比如对应members表,我们建立一个members_index表。

用户信息表(members)                    用户信息全文索引表(members_index)

User_id                                              user_id

User_name                                       index_intro

User_introduction                                   

在members_index表的index_intro中加入fulltext索引。

2. 对用户信息表(members)的User_introduction字段内容进行中文分词处理

中文分词的处理过程,可以参考简易中文分词系统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中文全文检索方法.

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Existe-t-il un avenir pour l'emploi en pharmacie clinique à l'Université médicale de Harbin ? (Quelles sont les perspectives d'emploi pour la pharmacie clinique à l'Université médicale de Harbin ?) Existe-t-il un avenir pour l'emploi en pharmacie clinique à l'Université médicale de Harbin ? (Quelles sont les perspectives d'emploi pour la pharmacie clinique à l'Université médicale de Harbin ?) Jan 02, 2024 pm 08:54 PM

Quelles sont les perspectives d'emploi de la pharmacie clinique à l'Université médicale de Harbin ? Bien que la situation nationale de l'emploi ne soit pas optimiste, les diplômés en pharmacie ont toujours de bonnes perspectives d'emploi. Dans l'ensemble, l'offre de diplômés en pharmacie est inférieure à la demande. Les sociétés pharmaceutiques et les usines pharmaceutiques sont les principaux canaux d'absorption de ces diplômés. La demande de talents dans l'industrie pharmaceutique augmente également de manière constante. Selon les rapports, ces dernières années, le rapport offre-demande pour les étudiants diplômés dans des domaines tels que les préparations pharmaceutiques et la chimie médicinale naturelle a même atteint 1:10. Direction d'emploi de la majeure en pharmacie clinique : Après l'obtention de leur diplôme, les étudiants se spécialisant en médecine clinique peuvent s'engager dans le traitement médical, la prévention, la recherche médicale, etc. dans les unités médicales et sanitaires, la recherche médicale et d'autres départements. Postes d'emploi : Représentant médical, représentant commercial pharmaceutique, représentant commercial, directeur commercial, directeur régional des ventes, responsable des investissements, chef de produit, spécialiste produit, infirmière

Comment télécharger rapidement l'image Win10 Comment télécharger rapidement l'image Win10 Jan 07, 2024 am 11:33 AM

Récemment, des amis ont expliqué comment télécharger des fichiers image Win10. Étant donné qu'il existe de nombreux fichiers image sur le marché, que dois-je faire si je souhaite trouver un fichier standard à télécharger ? Aujourd'hui, l'éditeur vous a apporté le lien pour télécharger l'image et les étapes détaillées de la solution. Examinons-les ensemble. Téléchargement rapide de l'image Win10 et lien de téléchargement du didacticiel d'installation >>> Accueil système Image Ghostwin101909 version 64 bits v2019.11<<<>>>Image Win10 64 bits v2019.07<<<>>>Image Win10 32 bits v2019. 07<< <1. Rechercher sur Internet

Comment nettoyer le dossier temporaire Comment nettoyer le dossier temporaire Feb 22, 2024 am 09:15 AM

Comment nettoyer le dossier temporaire Au fur et à mesure que nous utilisons l'ordinateur, les fichiers temporaires (fichiers temporaires) s'accumuleront progressivement. Ces fichiers temporaires sont générés lorsque nous utilisons l'ordinateur, comme les fichiers cache lors de la navigation sur le Web, les fichiers temporaires lors de l'installation de logiciels, etc. Ne pas nettoyer le dossier temporaire pendant une longue période peut occuper une grande quantité d'espace disque et affecter la vitesse de l'ordinateur. Par conséquent, nettoyer régulièrement le dossier temporaire est une étape nécessaire pour maintenir les performances de l’ordinateur. Ci-dessous, nous présenterons quelques moyens simples de nettoyer le dossier temporaire. Méthode 1 : Nettoyer manuellement le t

Comment réinitialiser le système Win10 Comment réinitialiser le système Win10 Jun 29, 2023 pm 03:14 PM

Comment réinitialiser le système Win10 ? De nos jours, de nombreux amis aiment utiliser des ordinateurs équipés du système Win10. Cependant, ils rencontreront inévitablement des problèmes insolubles lors de l'utilisation d'ordinateurs. À ce stade, vous pouvez essayer de réinitialiser le système. Suivons l'éditeur pour regarder le tutoriel sur la réinitialisation du système Win10. Les utilisateurs dans le besoin ne devraient pas le manquer. Tutoriel sur la réinitialisation du système Win10 1. Cliquez sur Windows et sélectionnez Paramètres. 2. Cliquez sur Mise à jour et sécurité. 3. Sélectionnez Restaurer. 4. Cliquez sur Démarrer à droite pour réinitialiser cet ordinateur. Ce qui précède représente l'intégralité du contenu de [Comment réinitialiser le système Win10 - Tutoriel sur la réinitialisation du système Win10]. Des didacticiels plus intéressants sont disponibles sur ce site !

Comment vérifier la configuration de l'ordinateur Win11 Comment vérifier la configuration de l'ordinateur Win11 Jun 29, 2023 pm 12:15 PM

Comment vérifier la configuration de l’ordinateur win11 ? Le système win11 est une version très pratique du système d'exploitation informatique. Cette version offre aux utilisateurs des fonctions riches, permettant aux utilisateurs d'avoir une meilleure expérience d'exploitation informatique. De nombreux amis qui utilisent des ordinateurs sont curieux de connaître la configuration spécifique de leur ordinateur et la manière d'effectuer cette opération. dans le système win11 ? De nombreux amis ne savent pas comment fonctionner en détail. L'éditeur a compilé un didacticiel sur la façon d'afficher la configuration de l'ordinateur win11 ci-dessous. Si vous êtes intéressé, suivez l'éditeur et continuez à lire ! Tutoriel d'affichage de la configuration de l'ordinateur Win11 1. Cliquez sur l'icône Windows dans la barre des tâches ci-dessous ou appuyez sur la « touche Windows » du clavier pour ouvrir le menu Démarrer. 2. Recherchez « Paramètres » ou « sett » dans le menu Démarrer.

Résoudre le problème de détection de l'environnement lors de la réinstallation du système Résoudre le problème de détection de l'environnement lors de la réinstallation du système Jan 08, 2024 pm 03:33 PM

Comment résoudre le problème selon lequel le test d'environnement échoue lors de la réinstallation du système et doit être réécrit. La raison est la suivante : le téléphone mobile est empoisonné. Vous pouvez installer un logiciel antivirus tel que Mobile Manager pour l'antivirus 2. De nombreux fichiers indésirables. les fichiers sont stockés à l'intérieur du téléphone mobile, ce qui entraîne l'occupation de la mémoire active du téléphone mobile. Effacez simplement le cache du téléphone pour résoudre ce problème. 3. La mémoire du téléphone est trop occupée par les logiciels et les fichiers enregistrés. Il n'y a aucun problème à supprimer fréquemment les fichiers et les logiciels inutiles tant que votre configuration matérielle répond aux exigences d'installation. utilisez le nouveau directement. Réinstallez le système à partir du disque système ! Vous pouvez utiliser une clé USB ou un disque dur pour l'installation, ce qui est très rapide. Mais la clé est d'utiliser un disque système avec une bonne compatibilité (prend en charge l'installation en modes IDE, ACHI et RAID), et il peut être activé automatiquement et en permanence, ce qui a été vérifié. donc

Comment ajouter les valeurs des éléments HTML ? Comment ajouter les valeurs des éléments HTML ? Sep 16, 2023 am 08:41 AM

Cet article vous apprendra comment ajouter la valeur d'un élément en HTML. Nous avons une compréhension de base de l'attribut value en HTML et des situations dans lesquelles il est utilisé. Attendons avec impatience une meilleure compréhension de l'attribut HTMLvalue. En HTML, l'attribut value est utilisé pour décrire la valeur de l'élément avec lequel il est utilisé. Il a des significations différentes pour différents composants HTML. Utilisation - Il peut être utilisé avec des éléments ,,,, et. -Lorsque l'attribut value est présent, il indique quelle est la valeur par défaut de l'élément d'entrée. Il a différentes significations pour différents types d'entrée : lorsque le bouton apparaît dans "bouton", "réinitialiser" et &qu

comment réinitialiser le mot de passe dans MySQL comment réinitialiser le mot de passe dans MySQL Feb 18, 2024 pm 12:41 PM

MySQL est un système de gestion de bases de données relationnelles open source largement utilisé dans divers types de développement d'applications. Lorsque vous utilisez la base de données MySQL, vous devez souvent modifier le mot de passe pour améliorer la sécurité de la base de données. Cet article expliquera comment modifier le mot de passe MySQL à travers des exemples de code spécifiques. Dans MySQL, vous pouvez modifier le mot de passe en suivant les étapes suivantes : Connectez-vous au serveur de base de données MySQL : Ouvrez une invite de commande ou une fenêtre de terminal et exécutez la commande suivante : mysql-uroo

See all articles