首先要说,实现全文搜索一般都不用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为全文搜索索引
2 插入一些数据
3 全文搜索
最简单的全文搜索方式是带有MATCH...AGAINST语句的SELECT查询
4 使用逻辑搜索修饰符(Boolean search modifiers)
++表示必须
+表示要有的-表示不能有的
不带+或者-表示,任意一种
注意搜索的字段长度最好大于5,否则可能找不到
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
转贴请注明出处: http://blog.csdn.net/froole
搜索引擎同样也是一种数据库,
但是,索引的实现比较复杂,而且在每次更新数据的时候,都要更新索引,
所以,更新数据速度非常得慢,可以实现非常快的搜索速度。
搜索引擎有付费的也有免费并且开源的,
开源的搜索引擎用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 ;
- 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 ...');
最简单的全文搜索方式是带有MATCH...AGAINST语句的SELECT查询
- SELECT *
- FROM `articles`
- WHERE MATCH (
- body
- )
- AGAINST (
- 'MySQL'
- )
++表示必须
+表示要有的-表示不能有的
不带+或者-表示,任意一种
- 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
- )
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
转贴请注明出处: http://blog.csdn.net/froole