gpt4 book ai didi

mysql全文搜索 sql命令的写法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com