Mysql下的Web程序,如何实现全文检索
目录
Mysql下的Web程序,如何实现全文检索
首先要说,实现全文搜索一般都不用RDB,而是使用专用的搜索引擎。
搜索引擎同样也是一种数据库,
但是,索引的实现比较复杂,而且在每次更新数据的时候,都要更新索引,
所以,更新数据速度非常得慢,可以实现非常快的搜索速度。
搜索引擎有付费的也有免费并且开源的,
开源的搜索引擎用Apache Lucene得比较多
这里有PHP版的
Apache Luncene的子工程中有一个 ,
是一个源于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,否则可能找不到