- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章mysql全文搜索 sql命令的写法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
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会。就这么简单。 这虽然是一种比较过时的方法,但是非常实用.
最后此篇关于mysql全文搜索 sql命令的写法的文章就讲到这里了,如果你想了解更多关于mysql全文搜索 sql命令的写法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有没有办法对 Subversion 存储库执行全文搜索,包括所有历史记录? 例如,我编写了一个在某处使用过的功能,但后来不需要它,所以我对文件进行了 svn rm'd,但现在我需要再次找到它以将其用于
如何进行 MySQL 搜索,既匹配部分单词,又提供准确的相关性排序? SELECT name, MATCH(name) AGAINST ('math*' IN BOOLEAN MODE) AS rel
我在 postgresql 中创建了一个用于全文搜索的索引。 CREATE INDEX pesquisa_idx ON chamado USING gin(to_tsvector('portugues
我已经设置了一个数据库并启用了全文搜索,当我使用以下内容搜索数据库时,数据库中有一些条目包含“测试”一词,还有一个条目包含“测试更多”: SELECT keywords, title FROM dat
我想知道是否可以进行 MATCH() AGAINST()(全文)搜索,使得不直接相邻的单词需要按特定顺序排列?在我的网站上,当用户在双引号之间键入单词时,搜索将仅显示具有特定顺序的这些单词的结果。例如
我有一个 80,000 行的数据库,当我测试一些 FULLTEXT 查询时,我遇到了一个意想不到的结果。我已从 MYSQL 中删除停用词并将最小字长设置为 3。 当我执行此查询时: SELECT `s
我刚刚在我的 MYSQL 数据库中发现了一堆流氓数据... 到达它的唯一方法是通过其中一列 - FILE_PATH,其中包含文件路径的斜杠剥离版本。我需要在这组文件中找到一些恶意文件——它们的文件名都
我正在为我的站点构建一个小的搜索功能。我正在接受用户的查询,提取关键字,然后针对提取的关键字运行全文 MySQL 搜索。 问题在于 MySQL 将词干视为文字。这是正在发生的过程: 用户搜索“棒球”之
这是一个关于使用(关系)数据库设计全文搜索的系统架构问题。我使用的具体软件是 Solr 和 PostgreSQL,仅供引用。 假设我们正在构建一个有两个用户 Andy 和 Betty 的论坛 -- P
当元素数组中的数组包含应与我的搜索匹配的文本时,我无法检索文档。 这里有两个示例文档: { _id: ..., 'foo': [ { 'name
我正在使用这个查询,但不幸的是它运行缓慢: SELECT *, (MATCH(`title`) AGAINST ('$word' IN BOOLEAN MODE) * 2 + MATC
我正在构建一个非常简单的产品目录,它将在 mysql 表中存储产品,我想尽快搜索产品(并尽可能相关)。产品数据库将非常大(大约 500.000 个产品),这就是为什么使用“like”而不使用索引的搜索
select count(distinct email_address) from users WHERE MATCH (email_address) AGAINST ('@r
我正在尝试在 mySQL 中进行简单的全文搜索,但在复数方面遇到一些问题。 我确实相信我符合50% 规则。 我不认为我使用了停用词。 我正在运行这样的查询: SELECT * FROM product
我在 innoDB 数据库中使用全文搜索时遇到了一个大问题。 首先,ns_pages 表有超过 2.6m 的记录,全文索引有 3 个键 block 。 该数据库在具有 128GB RAM 的 Dell
我有一个城市和州的数据库(大约 43,000 个)。我对其进行全文搜索,如下所示: select city, state, match(city, state_short, state) agains
我正在使用带有自然语言全文的 Mysql FULLTEXT 搜索,不幸的是,我遇到了 FULLTEXT 50% 阈值,如果给定的关键字出现在总行数的 50% 时间,则不允许我搜索行。 我搜索并找到了一
如果我搜索单词hello,那么我没有匹配到,而我搜索单词hella,那么我得到了匹配。同样的情况也发生在“Non”这个词上。我在 Mac 上的 MAMP 和 sqlfiddle.com 上进行了测试,
所以我有一个简单的场景。我有一张 field 表(事件 field 等)。我的查询看起来像: SELECT * FROM venues WHERE venues.name % 'Philips Are
我有一个表,其中有视频数据,如“标题”、“描述”等。我正在尝试使用 MySQL 全文索引编写一个搜索引擎。 SQL 查询适用于某些单词,但不是每个单词。这是我的 SQL 查询; SELECT * FR
我是一名优秀的程序员,十分优秀!