| 域名空间 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | 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,&&, ¦ ¦,!,&,\ ¦,\+,_"; /* and = && = & = + or = ¦ ¦ = ¦ 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 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 最新更新 | 热点排行 | 推荐新闻 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||