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,否则可能找不到
搜索引擎同样也是一种数据库,
但是,索引的实现比较复杂,而且在每次更新数据的时候,都要更新索引,
所以,更新数据速度非常得慢,可以实现非常快的搜索速度。
搜索引擎有付费的也有免费并且开源的,
开源的搜索引擎用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,否则可能找不到
相关文章推荐
- Mysql下的Web程序,如何实现全文检索
- 【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net)
- 如何实现小型WEB搜索引擎(C#+SQL Server全文检索+Asp.net)
- 如何实现小型WEB搜索引擎(C#+SQL Server全文检索+Asp.net)
- MySQL全文检索中Like索引的实现
- 如何基于Agora Web SDK实现小程序互动连麦
- 如何让程序检测你的按键,实现WEB热键功能呢?
- 如何用C#实现数据库全文检索
- 基于MonoRail 的Web程序如何实现更换模板
- 那些年java web开发中遇到的问题(4)---如何实现表单提交(插入数据到mysql)
- 通过MySQL内置全文检索实现中文的相关检索
- 如何在Linux下部署web程序(搭建vsftp服务,搭建sshd 服务器,jdk安装步骤,Tomcat安装步骤,MySQL安装步骤)
- MySql中文全文检索的一种实现方案
- 如何基于Agora Web SDK实现小程序互动连麦
- WEB运用程序如何实现高效可维护?
- PHP+MYSQL实现全文检索及全文检索工具
- PHP+MYSQL实现全文检索及全文检索工具
- 如何在Web程序中实现定时运行的功能?
- python+mysql实现简单的web程序
- struts2框架如何使用websocket实现web程序消息推送