`
pcajax
  • 浏览: 2162429 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MySQL数据库对dvbbs.php全文搜索的完全分析

阅读更多

好几天都没有更新文章了,唉,人就是懒呀。

首先,大家先去下载一份dvbbs.php beta1的代码,解压后先抛开php代码,找出你的mysql手册,如果没有手册那么就直接看下面的实例操作吧!

mysql全文搜索,sql的写法:

MATCH (col1,col2,…) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])

比如:

SELECT * FROM articles WHERE MATCH (title,body) AGAINST (’database’);

MATCH()函数对于一个字符串执行资料库内的自然语言搜索。一个资料库就是1套1个或2个包含在FULLTEXT内的列。搜索字符串作为对 AGAINST()的参数而被给定。对于表中的每一行, MATCH() 返回一个相关值,即, 搜索字符串和 MATCH()表中指定列中该行文字之间的一个相似性度量。

下面的例子则更加复杂。询问返回相关值,同时对行按照相关性渐弱的顺序进行排序。为实现这个结果,你应该两次指定 MATCH(): 一次在 SELECT 列表中而另一次在 WHERE子句中。这不会引起额外的内务操作,原因是MySQL 优化程序注意到两个MATCH()调用是相同的,从而只会激活一次全文搜索代码。

以下为引用的内容:

mysql> SELECT id, body, MATCH
(title,body) AGAINST
-> (’Security implications of
running MySQL as root’) AS score
-> FROM articles WHERE MATCH
(title,body) AGAINST
-> (’Security implications of
running MySQL as root’);

所以,到这里你应该会mysql 英文全文搜索了.

请注意一个问题.

一些词在全文搜索中会被忽略:

* 任何过于短的词都会被忽略。 全文搜索所能找到的词的默认最小长度为 4个字符。

* 停止字中的词会被忽略。

mysql还自带查询扩展功能.这里不做过多讨论.

下面进行php中文全文搜索的分析

曾经有一个版本的mysql支持中文全文搜索(海量 mysql chinese+,说是GPL但是最终没有开源)

中文全文搜索的关键是在分词上.mysql本身不支持cjk的分词(cjk:chinese,japanese,korean),

所以

!!!!****如何用php模拟分词是mysql全文索引的关键****!!!!

中文分词是语言分词中最困难的.现在也没有人能够彻底完美的解决(虽然这些搜索引擎做的都还不错.)

以下为引用的内容:

//fcicq:下面给大家看看这里php的分词是怎么做的.
function &DV_ChineseWordSegment($str,$encodingName=’gbk’){

static $objEnc = null;

if( $objEnc === null ){

if( !class_exists(’DV_Encoding’) ){

require_once ROOT_PATH.’inc/DV_Encoding.class.php’;

}

$objEnc =& DV_Encoding::GetEncoding($encodingName);

}

$strLen = $objEnc->StrLength($str);

$returnVal = array();

if( $strLen < = 1 ){

return $str;

}

$arrStopWords =& DV_GetStopWordList();

//print_r($arrStopWords);

//过滤所有HTML标签

$str = preg_replace('#<[a-zA-Z]+?.*?>|#is’, ”, $str);

//过滤所有stopword

$str = str_replace($arrStopWords[’StrRepl’],’ ‘,$str);

$str = preg_replace($arrStopWords[’PregRepl’],’ ‘,$str);

//echo “$str:{$str}
“;

$arr = explode(’ ‘,$str);

//fcicq:好了,这下面的才是php分词关键 *************
foreach( $arr as $tmpStr ){

if ( preg_match(”/^[x00-x7f]+$/i”,$tmpStr) === 1 )
{ //fcicq:全是E文,没关系,mysql可以认识的

$returnVal[] = ‘ ‘.$tmpStr;

} else{ //fcicq:中英混合…

preg_match_all(”/([a-zA-Z]+)/i”, $tmpStr, $matches);

if( !empty($matches) ){ //fcicq:英语部分

foreach( $matches[0] as $matche ){

$returnVal[] = $matche;

}

}

//过滤ASCII字符

$tmpStr = preg_replace(”/([x00-x7f]+)/i”, ”
, $tmpStr); //fcicq:你看,剩下的不就全是中文了?

$strLen = $objEnc->StrLength($tmpStr)-1;

for( $i = 0 ; $i < $strLen ; $i++ ){

$returnVal[] = $objEnc->SubString($tmpStr,$i,2)
; //fcicq:注意这里的substr,不是手册上的.
//fcicq:你仔细看,所有的词都是分成两个.
//比如”数据库的应用”,会被分成数据 据库 库的 的应 应用…
//全文搜索: 全文 文搜 搜索
//这分词自然是不怎么样的
//但是,搜索的时候同样这么做.
//比如搜索数据库,就相当于搜索了数据 据库.
//这是一种相当传统的全文搜索分词方法.

}

}

}

return $returnVal;

}//end function DV_ChineseWordSegment

//fcicq:这就是传说中的substr.偶相信许多人写出来的php代码都比这个好.
function &SubString(&$str,$start,$length=null){

if( !is_numeric($start) ){

return false;

}

$strLen = strlen($str);

if( $strLen < = 0 ){

return false;

}

if( $start < 0 || $length < 0 ){

$mbStrLen = $this->StrLength($str);

} else{

$mbStrLen = $strLen;

}

if( !is_numeric($length) ){

$length = $mbStrLen;

} elseif( $length < 0 ){

$length = $mbStrLen + $length - 1;

}

if( $start < 0 ){

$start = $mbStrLen + $start;

}

$returnVal = '';

$mbStart = 0;

$mbCount = 0;

for( $i = 0 ; $i < $strLen ; $i++ ){

if( $mbCount >= $length ){

break;

}

$currOrd = ord($str{$i});

if( $mbStart >= $start ){

$returnVal .= $str{$i};

if( $currOrd > 0×7f ){

$returnVal .= $str{$i+1}.$str{$i+2};

$i += 2;

}

$mbCount++;

} elseif( $currOrd > 0×7f ){

$i += 2;

}

$mbStart++;

}

return $returnVal;

}//end function SubString

//插入全文搜索分词表.一共两个,一个 topic_ft,一个bbs_ft

$arrTopicIndex =& DV_ChineseWordSegment($topic);

if( !empty($arrTopicIndex) && is_array($arrTopicIndex) ){

$topicindex = $db->escape_string(implode(’ ‘,$arrTopicIndex));

if( $topicindex !== ” ){

$db->query(”UPD ATE {$dv}topic_ft SET topicindex=’
{$topicindex}’ WHERE topicid=’{$RootID}’”);

} else{

$db->query(”DEL ETE FROM {$dv}topic_ft
WHERE topicid=’{$RootID}’”);

}

}
}

这就是所谓的mysql全文搜索分词,mysql不会分词,而php会。就这么简单。

这虽然是一种比较过时的方法,但是非常实用。

分享到:
评论

相关推荐

    [论坛社区]动网论坛PHP版 v1.0.4 Build 20070521_dvbbs.php_1.0.4_gbk.zip

    动网论坛PHP版 v1.0.4 Build 20070521_dvbbs.php_1.0.4_gbk.zip是一款基于PHP语言开发的论坛软件,主要用于搭建和管理在线社区。该版本发布于2007年5月,是动网论坛在那个时期的一个稳定版本。动网论坛作为早期流行...

    ASP论坛网站实例开发源码——Discuz4.1.0-Dvbbs.PHP转换实例开发.rar

    可识别的MySQL数据库格式。这可能涉及到SQL语句的编写或者使用现成的转换工具。 4. 网站架构重构: ASP和PHP的执行模型不同,因此在转换时可能需要调整HTML模板、CSS样式以及JavaScript脚本,确保页面在PHP环境中...

    [论坛社区]Discuz 5.0.0-Dvbbs.PHP转换_discuz500-dvbbs.rar

    资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百...数据库:MySql(建议用 5.7,8.0 有时候会有坑) 部署环境:Tomcat(建议用 7.x 或者 8.x b版本),maven Spring root vue.js

    [论坛社区]Discuz4.1.0-Dvbbs.PHP转换_discuz410-dvbbs.rar

    资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百...数据库:MySql(建议用 5.7,8.0 有时候会有坑) 部署环境:Tomcat(建议用 7.x 或者 8.x b版本),maven Spring root vue.js

    ASP论坛网站实例开发源码——Discuz4.1.0-Dvbbs.PHP转换实例开发.zip

    这可能涉及到对论坛的核心功能,如登录、发帖、回帖、搜索等进行重新实现。 3. 用户界面(UI)调整:由于ASP和PHP的模板机制不同,原有的HTML和CSS可能需要调整以符合Discuz! 的模板系统。 4. 安全性和性能优化:...

    Dvbbs 7.1.0论坛程序下载

    【Dvbbs 7.1.0论坛程序下载】是一个针对中文互联网社区的软件解决方案,尤其在【动网论坛】这个标签下,我们可以推断它是一个基于PHP和MySQL的论坛系统。Dvbbs(Discuz! Board)是知名的论坛软件之一,由康盛创想...

    动网论坛PHP源码

    1. **环境准备**:首先确保服务器已安装PHP环境(如WAMP或XAMPP)和MySQL数据库。 2. **解压源码**:将压缩包中的“动网论坛PHP源码(Dvbbs) 2.0”文件夹解压到服务器的Web根目录下。 3. **创建数据库**:登录MySQL...

    PHPWind-全版本-1.0-9.0.zip

    值得注意的是,使用这些版本前,需要了解PHPWind的安装要求,如服务器环境(PHP、MySQL)、权限设置、URL重写等。同时,为了保证安全,应当及时更新到最新稳定版,修补可能存在的安全漏洞,并定期备份数据库。 总的...

    云上天蝎风格for dvbbs7.0 sp3

    MDB文件在DVBBS中可能用于存储非MySQL数据库支持的一些特定数据,例如主题设置、广告或者定制插件的数据。 【论坛相关服务.txt】可能是关于如何安装、配置和维护这款皮肤的说明文档,里面可能详细列出了步骤和注意...

    动网论坛(dvbbs)

    动网论坛基于PHP编程语言和MySQL数据库系统,采用Web技术构建,支持多用户同时在线交流,提供主题发布、回复、私人消息、用户组管理、权限控制等多种功能。这一架构使得它在各种服务器环境中都能良好运行,并且易于...

    动网论坛 DVBBS 8.0 SQL 商业版

    此外,该版本对搜索引擎友好,增强了SEO(搜索引擎优化)功能,有利于提高论坛在搜索引擎结果中的排名,吸引更多的访客。 在功能方面,DVBBS 8.0 SQL商业版包含了丰富的社区管理工具。例如,管理员可以轻松管理用户...

    动网论坛源代码dvbbs.net

    2. 配置服务器环境,如安装Apache或Nginx服务器、PHP解析器和MySQL数据库。 3. 创建数据库并导入数据。 4. 修改配置文件,设置数据库连接信息、网站地址等。 5. 访问Web服务器上的安装脚本,完成安装过程。 五、...

    PHPWind_For_DVBBS_UTF8_2.0.rar

    在技术实现上,PHPWind采用了高效的PHP编程语言,结合MySQL数据库,构建出稳定且快速的运行环境。其模板系统允许用户自定义界面,通过修改CSS样式和HTML结构,打造出个性化论坛。此外,2.0版本还引入了Ajax技术,...

    商业源码-编程源码-PHPWind For DVBBS Forums v2.0 简体中文 gbk 正式版.zip

    - **服务器环境**:确保服务器支持PHP运行和MySQL数据库连接。 - **安全设置**:合理设置管理员账号和密码,定期更新系统以防止安全漏洞。 - **性能优化**:通过缓存技术、数据库优化等方式提升论坛的响应速度和并发...

    Dvbbs论坛多人斗地主插件 v2.0-源码.zip

    3. **PHP编程**:Dvbbs基于PHP,因此开发者需要熟悉PHP语法和面向对象编程,以及如何与数据库(如MySQL)交互。 4. **游戏逻辑**:斗地主游戏有特定的规则,编写源码时需要将这些规则准确无误地转化为计算机能理解...

    魔方插件 for dvbbs all

    DVBBS基于PHP编程语言和MySQL数据库,其强大的模块化设计使得扩展性极强。而魔方插件则是在这个基础上进行的功能增强,它通过与DVBBS的核心系统进行交互,实现对论坛功能的定制和优化。 魔方插件的主要特点可能包括...

    首页分框架音乐插件(二)for dvbbs 6.0

    这通常涉及对dvbbs后台管理界面的操作,以及对PHP脚本和数据库的熟悉程度。 "music"这个文件名可能是存放音乐文件的目录,或者是用来控制音乐播放的脚本。如果是一个目录,里面可能包含多首预设的音乐文件,格式...

    商业源码-编程源码-PHPWind For DVBBS Forums v2.0 繁体中文 big5 正式版.zip

    PHPWind 是基于PHP和MySQL数据库开发的,其特点是高效、稳定和易于扩展。PHPWind 提供了丰富的功能模块,如论坛、博客、问答、家园等,同时具有良好的用户体验和管理界面。这款软件被广泛应用于各类社区网站的建立,...

    一键安装PHP,MYSQL,ZEND,PHPMYadmin FTP服务器ServU 一键安装URLRewrite组件

    无需具备专业的WEB服务器...添加一个网站需要建目录,建FTP帐号,建IIS站点,添加脚本映射,添加主机头,建立mysql数据库,配置进程池。 设置目录权限,设置IIS登录帐户权限…… 安装的时候的文件夹路径不能有空格

    云上之魅风格for dvbbs7.0 sp2

    MDB是Microsoft Access的默认文件扩展名,尽管DVBBS主要使用MySQL作为数据库系统,但有可能使用Access来处理特定的配置或临时数据。 "论坛相关服务.txt" 这个文件可能包含了关于如何安装、配置和优化该皮肤的详细...

Global site tag (gtag.js) - Google Analytics