目录

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为全文搜索索引

  1. CREATE TABLE articles (
  2. id int(10) unsigned NOT NULL auto_increment,
  3. title varchar(200) default NULL,
  4. body text,
  5. PRIMARY KEY  (id),
  6. FULLTEXT KEY title (title,body)
  7. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

**2 插入一些数据

  1. INSERT INTO articles (idtitlebody) VALUES
  2. (1, ‘MySQL Tutorial’ , ‘DBMS stands for DataBase …’ ),
  3. (2, ‘How To Use MySQL Efficiently’ , ‘After you went through a … stands’ ),
  4. (3, ‘Optimising MySQL’ , ‘In this tutorial we will show …’ ),
  5. (4, ‘1001 MySQL Tricks’ , ‘1. Never run mysqld as root. 2. …’ ),
  6. (5, ‘MySQL vs. YourSQL’ , ‘In the following database comparison …’ ),
  7. (6, ‘MySQL Security’ , ‘When configured properly, MySQL …’ );

3 全文搜索**

最简单的全文搜索方式是带有MATCH…AGAINST语句的SELECT查询

  1. SELECT *
  2. FROM articles
  3. WHERE MATCH (
  4. body
  5. )
  6. AGAINST (
  7. ‘MySQL’
  8. )

4 使用逻辑搜索修饰符(Boolean search modifiers)

++表示必须

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

不带+或者-表示,任意一种

  1. SELECT *
  2. FROM articles
  3. WHERE MATCH (
  4. body
  5. )
  6. AGAINST (
  7. ‘+mysql +When’
  8. IN BOOLEAN
  9. MODE
  10. )
  11. SELECT *
  12. FROM articles
  13. WHERE MATCH (
  14. body
  15. )
  16. AGAINST (
  17. ‘+database -DBMS’
  18. IN BOOLEAN
  19. MODE
  20. )
  21. SELECT *
  22. FROM articles
  23. WHERE MATCH (
  24. body
  25. )
  26. AGAINST (
  27. ‘database DBMS’
  28. IN BOOLEAN
  29. MODE
  30. )

注意搜索的字段长度最好大于5,否则可能找不到