程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql全文搜刮 sql敕令的寫法

mysql全文搜刮 sql敕令的寫法

編輯:MySQL綜合教程

mysql全文搜刮 sql敕令的寫法。本站提示廣大學習愛好者:(mysql全文搜刮 sql敕令的寫法)文章只能為提供參考,不一定能成為您想要的結果。以下是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會。就這麼簡略。
這固然是一種比擬過時的辦法,然則異常適用。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved