php mysql 全文检索_PHP+MYSQL实现全文检索
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 mysql 全文检索_PHP+MYSQL实现全文检索相关推荐
- php mysql mysql_set_charset()._PHP:MySQL函数mysql_set_charset()的用法
mysql_set_charset (PHP 5 >= 5.2.3) mysql_set_charset - 设置客户端的字符集 本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除.应使用 ...
- mysql+基本代码_PHP+MySQL扎实基本功十句话_php
2.写程序前看看怎么用error_reporting. 3.不懂就问本身没错,但你需要在那之前查查手册. 4.当然,你需要懂得使用手册.手册上找不到答案的时候,应该考虑下网络上的搜索引擎. 5.刚学会 ...
- php mysql预处理_PHP MySQL 预处理语句
预处理语句对于防止 MySQL 注入是非常有用的. 预处理语句及绑定参数 预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高. 预处理语句的工作原理如下:预处理:创建 SQL 语句模板并发送 ...
- php mysql 降_PHP,MySQL:mysql替代php in_array函数
假如我有一个数组并且我想检查一个元素是否是该数组的一部分,我可以继续使用in_array(needle,haystack)来确定结果.我试图看到PHP相当于我的目的.现在你可能有一个即时的答案,你可能 ...
- php mysql购物车_php mysql购物车实现程序
php mysql购物车实现程序 (2015-05-10 21:31:00) 标签: 股票 分类: PHP 简单容易理解.cookie存购物车ID,db存购物车数据. http://www.111cn ...
- mysql页码_PHP+MySQL实现输入页码跳转到指定页面功能示例
本文实例讲述了php+mysql实现输入页码跳转到指定页面功能.分享给大家供大家参考,具体如下: 一.代码 conn.php: $id=mysql_connect("localhost&qu ...
- php加mysql分页_php mysql 分页函数
一款超简单的php mysql 分页,也是很实例的一款函数,他可以自动获取用户增加的参数,而不需要用户来增加,很自能化的一款自能分页程序. ------------------------------ ...
- php过滤特殊字符mysql攻击_php – MySQL在特殊字符处切断字符串
我正在尝试使用 PHP将远程POST数据(iSnare发送的文章)插入MySQL.数据来自远程POST发件人,我可以将其写入纯文本文件而不会出现问题. 不幸的是,当它将它插入MySQL时,MySQL会 ...
- php mysql 分类_php+mysql实现无限分类实例详解
本文实例讲述了php+mysql实现无限分类的方法.分享给大家供大家参考.具体分析如下: 1.数据库通过设置父类ID来进行唯一索引,然后使用函数的递归调用实现无限分类: 2.数据库设计通过特定格式进行 ...
最新文章
- Linux服务器文件描述符最大值修改
- ARM构架之cache初探
- KubeVela + KEDA:为应用带来“与生俱来”的弹性伸缩能力
- SAP C4C - Field creation not permitted in partner devel
- jsp2自定义标签开篇
- python变量类型是动态的_python内存动态分配过程详解
- UPS不间断电源的种类有哪些 常见的3类UPS电源
- 11-基于dev的bug(还没想通)
- python web开发基础_python web开发基本概念
- Python tkinter版猜数游戏
- angelajs中ajax,前端测试数据怎么利用Mock.js进行生成
- 【优化预测】基于matlab差分算法优化ANN预测【含Matlab源码 151期】
- input 输入法禁用
- 三/五/七/九点二次平滑法
- photoshop图片显示为索引,解决办法
- Cytoskeleton / 艾美捷——BimC驱动蛋白运动域蛋白
- Maya: Time Editor Maya教程:时间编辑器 Lynda课程中文字幕
- linux安装iso软件命令,linux命令制作iso镜像
- Abaqus CAE2022启动时报错“The desired vendor daemon is down”
- puts()和gets()