您的位置:首页 > 数据库 > MySQL

Mysql下的Web程序,如何实现全文检索

2008-12-15 20:40 691 查看
首先要说,实现全文搜索一般都不用RDB,而是使用专用的搜索引擎。
搜索引擎同样也是一种数据库,
但是,索引的实现比较复杂,而且在每次更新数据的时候,都要更新索引,
所以,更新数据速度非常得慢,可以实现非常快的搜索速度。

搜索引擎有付费的也有免费并且开源的,
开源的搜索引擎用Apache Lucene得比较多
这里有PHP版的
http://framework.zend.com/manual/zh/zend.search.lucene.html
Apache Luncene的子工程中有一个solr
是一个源于CBNET的一个搜索引擎,可以支持大型网站。

如果非用Mysql,那就是自动生成like但是注意,

%关键字%这种形势的关键字无法使用索引,

所以,搜索效率会非常的低。
在Mysql中还有另一种实现全文搜索的方法,也就是MATCH...AGAINST语句。
以下借花献佛,介绍一下。

MYSQL在使用like进行全文搜索效率比较低,尤其在处理大量数据的时候.

MySQL针对这一问题提供了一种基于内建的全文查找方式的解决方案。在此,开发者只需要简单地标记出需要全文查找的字段,然后使用特殊的
MySQL方法在那些字段运行搜索,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜索),而且实现了更高质量的搜索,因为
MySQL使用自然语言来智能地对结果评级,以去掉不相关的项目.

1 建表语句

建立title和body为全文搜索索引

CREATE TABLE `articles` (
`id` int(10) unsigned NOT NULL auto_increment,
`title` varchar(200) default NULL,
`body` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `title` (`title`,`body`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2 插入一些数据
INSERT INTO `articles` (`id`, `title`, `body`) VALUES
(1, 'MySQL Tutorial', 'DBMS stands for DataBase ...'),
(2, 'How To Use MySQL Efficiently', 'After you went through a ... stands'),
(3, 'Optimising MySQL', 'In this tutorial we will show ...'),
(4, '1001 MySQL Tricks', '1. Never run mysqld as root. 2. ...'),
(5, 'MySQL vs. YourSQL', 'In the following database comparison ...'),
(6, 'MySQL Security', 'When configured properly, MySQL ...');
3 全文搜索

最简单的全文搜索方式是带有MATCH...AGAINST语句的SELECT查询
SELECT *
FROM `articles`
WHERE MATCH (
body
)
AGAINST (
'MySQL'
)
4 使用逻辑搜索修饰符(Boolean search modifiers)

++表示必须

+表示要有的-表示不能有的

不带+或者-表示,任意一种
SELECT *
FROM articles
WHERE MATCH (
body
)
AGAINST (
'+mysql +When'
IN BOOLEAN
MODE
)
SELECT *
FROM articles
WHERE MATCH (
body
)
AGAINST (
'+database -DBMS'
IN BOOLEAN
MODE
)
SELECT *
FROM articles
WHERE MATCH (
body
)
AGAINST (
'database DBMS'
IN BOOLEAN
MODE
)
注意搜索的字段长度最好大于5,否则可能找不到
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: