达内首页 > IT技术学院 > PHP学院 > 浅析PHP+MYSQL实现全文检索
浅析PHP+MYSQL实现全文检索
作者:广州达内科技 更新时间:2013-08-05 14:38 来源:Android开发培训
这里介绍一种比较高效的PHP全文检索实现方法,这就是采用MYSQL的FULLTEXT字段类型。但是MYSQL的FULLTEXT字段对中文的支持不是很好,本文也一并介绍如何通过PHP+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字段。同样,在查询的时候也需要将查询的关键词进行同样方法的转换。

上一篇:PHP几点精华,当然不只这些哟
下一篇:php格式怎么打开

相关资讯

  • [2013-08-05 14:39:12] PHP集成开发工具(IDE)的比较
  • [2013-08-05 14:38:40] php格式怎么打开
  • [2013-08-05 14:38:17] 浅析PHP+MYSQL实现全文检索
  • [2013-08-05 14:37:45] PHP几点精华,当然不只这些哟
  • [2013-08-05 14:29:37] 广州达内科技:PHP数据访问对象模式
  • 【2013-2月28日】
    Java 软件工程师就业班
    >>热招中!


    【2013-2月28日】
    3G-Android 工程师就业班
    >>热招中!


    【2013-2月28日】
    3G-Android 工程师周末班
    >>热招中!

    【2013-2月28日】
    软件测试 工程师就业班
    >>热招中!