찾다
데이터 베이스MySQL 튜토리얼PHP+MYSQL实现全文检索_MySQL

使用分词类库,分词类库请参见: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中文全文检索方法.

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
哈医大临床药学就业是否有前途(哈医大临床药学就业前景怎么样)哈医大临床药学就业是否有前途(哈医大临床药学就业前景怎么样)Jan 02, 2024 pm 08:54 PM

哈医大临床药学就业前景如何尽管全国就业形势不容乐观,但药科类毕业生仍然有着良好的就业前景。总体来看,药科类毕业生的供给量少于需求量,各医药公司和制药厂是吸纳这类毕业生的主要渠道,制药行业对人才的需求也在稳步增长。据介绍,近几年药物制剂、天然药物化学等专业的研究生供需比甚至达到1∶10。临床药学专业就业方向:临床医学专业学生毕业后可在医疗卫生单位、医学科研等部门从事医疗及预防、医学科研等方面的工作。就业岗位:医药代表、医药销售代表、销售代表、销售经理、区域销售经理、招商经理、产品经理、产品专员、护

如何查看win11电脑配置如何查看win11电脑配置Jun 29, 2023 pm 12:15 PM

如何查看win11电脑配置?win11系统是一款非常实用的电脑操作系统版本,该版本为用户们提供了丰富的功能,让用户们能够有更好的电脑操作体验,那么很多使用电脑的小伙伴们都很好奇自己电脑的具体配置,在win11系统中该如何进行这一操作呢?很多小伙伴不知道怎么详细操作,小编下面整理了win11电脑配置查看教程,如果你感兴趣的话,跟着小编一起往下看看吧!win11电脑配置查看教程1、点击下方任务栏的windows图标或者按下键盘“windows键”打开开始菜单。2、在开始菜单中找到“设置”或“sett

Win10系统如何重置Win10系统如何重置Jun 29, 2023 pm 03:14 PM

  Win10系统如何重置?现在有很多小伙伴都是喜欢使用Win10系统的电脑,而在使用电脑的过程中难免会遇到一些无法解决的问题,这时候可以尝试去重置系统,那么应该如何操作呢?下面就跟着小编一起来看Win10系统重置的教程吧,有需要的用户可不要错过。  Win10系统重置的教程  1、点击windows,选择设置。  2、点击更新和安全。  3、选择恢复。  4、右侧点击开始,重置此电脑。以上就是【Win10系统如何重置-Win10系统重置的教程】全部内容了,更多精彩教程尽在本站!

如何清理temp文件夹如何清理temp文件夹Feb 22, 2024 am 09:15 AM

如何清理temp文件夹随着我们在电脑上的使用,临时文件(temp文件)会逐渐积累。这些临时文件是在我们使用计算机时生成的,如浏览网页时的缓存文件、软件安装时的临时文件等。长时间不清理temp文件夹可能会占据大量磁盘空间,影响电脑运行速度。因此,定期清理temp文件夹是维护电脑性能的必要步骤。下面,我们将介绍清理temp文件夹的一些简单方法。方法一:手动清理t

win10镜像如何快速下载win10镜像如何快速下载Jan 07, 2024 am 11:33 AM

最近有小伙伴反应win10镜像文件该如何下载,因为市面的镜像文件多如牛毛,想找到正规的文件下载,这可怎么办呢?今天小编带来了下载镜像的链接,详细的解决步骤,具体的一起来看看吧。win10镜像快速下载安装教程下载链接>>>系统之家Ghostwin101909镜像64位版v2019.11<<<>>>Win10镜像64位v2019.07<<<>>>Win10镜像32位v2019.07<<<1、通过网络检索

解决系统重装时的环境检测问题解决系统重装时的环境检测问题Jan 08, 2024 pm 03:33 PM

重装系统时环境检测未通过如何解决需要进行改写的原因是:手机中毒了,可以安装手机管家等杀毒软件进行杀毒2、手机内部存储了许多垃圾文件,导致手机运行内存被占用。只需清理手机缓存即可解决这个问题3、手机内存被保存的软件和文件占用太多,需要经常删除不需要的文件和软件没问题,只要你的硬件配置符合安装要求,你可以直接使用新的系统盘重新安装系统!你可以使用U盘或者硬盘来进行安装,速度非常快。但是关键是要使用兼容性好的系统盘(支持IDE、ACHI、RAID模式的安装),并且能够自动永久激活,已经经过验证的。这样

如何在mysql中重置密码如何在mysql中重置密码Feb 18, 2024 pm 12:41 PM

MySQL是一个开源的关系型数据库管理系统,被广泛应用于各种类型的应用程序开发中。在使用MySQL数据库时,经常需要修改密码,以提高数据库的安全性。本文将介绍如何通过具体的代码示例来修改MySQL密码。在MySQL中,可以通过以下步骤来修改密码:登录到MySQL数据库服务器:打开命令提示符或终端窗口,并执行以下命令:mysql-uroo

php如何使用Phalcon3框架?php如何使用Phalcon3框架?May 31, 2023 pm 03:10 PM

在当今Web开发的世界中,框架是至关重要的组件。使用框架可以帮助开发人员缩短开发时间,增强代码的可重用性和可维护性,并且提供一定的安全性。Phalcon是最流行的PHP框架之一。它被设计成一个高效的框架,旨在提供最优的性能,最小化内存消耗和CPU负载。在本文中,我们将学习如何使用Phalcon3框架来开发高性能的Web应用程序。安装Phalcon3框架Pha

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.