通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 my小屋
联系我们
设为首页
加入收藏

 

qq,asp,php,jsp,xml,sql,.net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>在线服务>>疑难解答>>正文 新版上线![旧版]
注:打开慢时请稍等

mysql下的全文检索代码

http://www.iyit.net  日期:2006-10-6 15:40:40  来源:iyit.net收集  点击:
参加讨论
最近做了一个以文章为主的网站.  
 
是静态生成的页面.  
 
现在就差一个全文检索的功能.  
 
现在我做的是从数据库中检索.因为怕服务器负担过重.  
 
所以只检索了文件标题和关键字.对于文章内容没有检索.  
 
搜索了一下以前的贴子,发现这个问题还没有人能很好的解决.  
 
难道真的没有一个比较好的方法吗?  
 
现在我想实现一个可以搜索全文的功能.希望各位大虾不吝赐教.  
 
分不够可以再加.  
---------------------------------------------------------------  
 
<?  
//  有一个稍微改善速度并且简化代码的办法,就是把所有文件名按序号分类排列,例如  
 
//  新闻类:  news/0.htm,  news/1.htm,  ...,  news/9999.htm,  ...  
//  文档类:  doc/0.htm,  doc/1.htm,  ...  
//  ...  
 
//  这样,就可以根据用户所要求的文章类别,先确定类别,找到对应子目录  
//  在这个目录里按序号读文件,范围缩小,而且不必  findfirst,  findnext,  
//  可以有效提高速度。  
//  当然,各目录的文件数(即最大序号)必须保存在数据库里,  
//  每当有新页面产生时,必须同步更新数据库  
 
//  假设客户端传过来两个参数:  
//          type:            文章类型(news/doc/...)  
//          keyword:      关键字  
 
//  以下代码只演示如何实现文件内容搜索,不包含输入检查、and/or  处理等功能  
 
$type  =  http_post_vars["type"];  
$keyword  =  http_post_vars["keyword"];  
 
$sql  =  "select  max_ord  from  table1  where  type='$type'";  
$result  =  query($sql);  
$max_ord  =  $result['max_ord'];  
 
 
for  (  $ord  =  0;  $ord  <=  $max_ord;  $ord++  )  
{  
           $filename  =  "./"  .  $type  .  "/."  .  $ord  .  ".htm";  
           $fp  =  fopen($filename,  "rt");  
           if  (  $fp  )  
           {  
                       $str  =  fread($fp,  filesize($filename));  
                       //  这里就搜索字符串  $str,根据需要输出结果啦  
                       fclose($fp);  
           }  
}  
 
?>  
 
如果想按“行”输出结果,即输出关键字所在的整行  
可以不用  fopen,fread,直接用  
 
$array  =  file($filename);  
 
获得文件各行的数组,然后在行内检索  
 
---------------------------------------------------------------  
 
做全文检索  服务器负担不可能不重  如果量大的话  建议采用专门的全文检索引擎和构建专门的服务器。  
 
下面的或许对你有帮助  
http://www.evolt.org/article/boolean_fulltext_searching_with_php_and_mysql/18/15665/  
---------------------------------------------------------------  
 
再建字段时尤其用到varchar  or  char的字段最好加上binary  
或者在查询时这样用  
select  *  from  tablename  where  fieldname  binary  =      
or    
select  *  from  tablename  where  binary  fieldname=    
 
---------------------------------------------------------------  
 
将生成静态页面文件的内容在数据库里保存一份,浏览时用.html,搜索用数据库,select  *  from  tablename  where  field  like  %*%。我都是这样做的。  
---------------------------------------------------------------  
 
//#start  search  engine    
function  isoperator($keyword,$is_ereg_whole_str  =  false){  
               //check  isoperator  of  $keyword  for  search  engine  
               $operator  =  "and,or,not,&&,  &brvbar  &brvbar,!,&,\  &brvbar,\+,_";  
               /*  
               and  =  &&  =  &  =  +  
               or    =    &brvbar  &brvbar  =    &brvbar    
               not  =    !  =  -  
               %      =  *  
               _      =  ?  
               */  
               if(trim($keyword)  ==  ""){  
                               return  false;  
               }  
               $args  =  split(",",  $operator);  
               $is_return  =  false;  
               for($i  =  0;  $i<count($args);  $i++){  
                               $operator  =  strtoupper($args[$i]);  
                               if($is_ereg_whole_str){  
                                                 
                                               if(@eregi("  $operator  ",  $keyword)){  
                                                               $is_return  =  true;  
                                                               break;  
                                               }  
                               }else{  
                                               if($operator  ==  strtoupper($keyword)){  
                                                               $is_return  =  true;  
                                                               break;  
                                               }  
                               }  
               }  
               return  $is_return;  
}  
 
 
---------------------------------------------------------------  
 
看看这个吧  
http://jakarta.apache.org/lucene/docs/index.html  
高质量的全文搜索引擎  
 
我在上面做了支持中文断词的全文搜索  
---------------------------------------------------------------  
 
create  table  articles  (  
 id  int  unsigned  auto_increment  not  null  primary  key,    
title  varchar(200),  
body  text,  
fulltext  (title,body)  
);  
insert  into  articles  values(0,'mysql  tutorial',  'dbms  stands  for  database  management  ...');  
insert  into  articles  values(0,'how  to  use  mysql  efficiently',  'after  you  went  through  a  ...');  
insert  into  articles  values(0,'optimizing  mysql','in  this  tutorial  we  will  show  how  to  ...');  
insert  into  articles  values(0,'1001  mysql  trick','1.  never  run  mysqld  as  root.  2.  normalize  ...');  
insert  into  articles  values(0,'mysql  vs.  yoursql',  'in  the  following  database  comparison  we  ...');  
insert  into  articles  values(0,'mysql  security',  'when  configured  properly,  mysql  could  be  ...');  
 
在运行查询语句:  
select  *  from  articles  where  match  (title,body)  against  ('database')  
 
我这里一切正常。上面摘自英文帮助,不可能错误  
 
---------------------------------------------------------------  
 
有点问题。现在mysql的全文搜索对多节字符是不支持的。  
上面的是没错,如果用于搜索e文就绝对没问题,然而对中文这种双字节的字符就不支持了。  
在varchar可以用binary来修饰后就可以用全文搜索,但是text没有binary。  
mysql说明书上也说了,要在下版本完善这个全文搜索。

编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:分割中文字符如何避免切割半个中文字符?
下一篇:有没有这样函数:判断一数是否在一已知数组中?
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
我在windows  xp上安装apache2.044+php 我只是想在本地机上学习php ,还要安装 怎么删除mysql???
怎么样修改mysql安装后的root空密码? 在win2k下如何安装apache、mysql、php? php接受sqlserver存储过程的返回值问题
php+sqlserver分页最简单方法 一个困扰我的问题,mysql的时间问题。 怎么将图片存入mysql数据库?
请问在mysql中如何生成临时表哪? 一个简单的mysql数据库分页的程序模板( mysql数据库区分大小怎么解决?
如何再mysql中存储数组? 使用php和mysql保存和显示图片的全过程 php将mysql中jpeg图片取出后如何直接缩
把附件(word、excel、pdf)或图片存贮 如何将mysql中的数据导入到excel中?? winodws下iis/apache+php+mysql的安装配
使用apache 2和mysql 4.1.3安装php 5.0 iis与sql服务器安全加固详解 远程连接mysql资料
mysql密码忘记的修改 mysql初学者使用指南 mysql数据库连接过多的错误,可能的原因
最新更新 热点排行 推荐新闻
我在windows  xp上安装apache2.044+ph
apache+php,怎样打开session支持??
在linux中怎么配置pdflib和php  高分!
怎么样同时解释.php和.php3的文件呀,
php 4.1.0 及以后版本使用post变量的接
我的qq被盗走的原因分析
webqq好玩不?大鸟带你一起体验
奇奇怪怪的qq密技十五招
qq被盗到出售过程详解
微软winxp sp3再次跳票 推至08年发布
google苹果合作浏览器 防恶意网站
微软操作系统实现开源?
网管应当如何管理windows操作系统?
让windows xp系统锁定期间拒绝关机
windowsvista中文版11月30日正式发布
我在windows  xp上安装apache2.044+ph
php 在linux 下如何開啟ftp功能
apache2-win32+php的成功安装方法
怎么删除mysql???
apache+php,怎样打开session支持??
合并vcd片断、快速删除文件夹--dos命令
dos教程 dos命令基础应用
破解qq密码如此简单 
低格、分区、高格的应对--dos命令应用
一劳永逸--批处理命令(一)
qq2006 beta3隆重发布 实用功能一一奉
美国微软总部相中重庆15岁网络奇才(图
qq号码激活的常见问题及案例分析 
sql server安装文件挂起错误解决办法
三分钟让你的系统变处女:acronis tru
exeplorer.exe错误的问题的总结、解决
我的qq被盗走的原因分析
webqq好玩不?大鸟带你一起体验
奇奇怪怪的qq密技十五招
qq被盗到出售过程详解
google苹果合作浏览器 防恶意网站
网管应当如何管理windows操作系统?
让windows xp系统锁定期间拒绝关机
windowsvista中文版11月30日正式发布
google优化网站管理员指导方针
hilltop算法- 探索google排名新算法

设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights © 2004-2006 iyit.net all rights reserved.
网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息