设为首页 收藏本站
查看: 648|回复: 0

[经验分享] Mysql下的Web程序,如何实现全文检索

[复制链接]

尚未签到

发表于 2016-10-8 08:54:25 | 显示全部楼层 |阅读模式

首先要说,实现全文搜索一般都不用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,否则可能找不到
< type="text/javascript">< type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
转贴请注明出处:http://blog.csdn.net/froole

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-282840-1-1.html 上篇帖子: mysql中库文件的导入与导出 下篇帖子: Mysql让查询结果按照指定顺序排序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表