PHP学习_PHP技术_PHP网站建设_PHP程序员专注于PHP技术研究及学习

Adophper » 数据库 » Mysql全文检索,PHP+MYSQL实现全文检索

Mysql全文检索,PHP+MYSQL实现全文检索

此文被围观1005日期: 2013-01-25 分类 : 数据库  标签:  ·····
全站搜索:请查看开源中国的搜索板块 如何使用MYSQL+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字段。同样,在查询的时候也需要将查询的关键词进行同样方法的转换。 文章来源:http://www.phper.org.cn/?post=83

本站使用ThinkPHP框架开发读图网主题,目前托管在阿里云,图片由读图网提供. 蜀ICP备12031064号

Copyright © 2011-2017adophper.com All Rights Reserved.