2012-09-21 75 views
0

我注意到MATCH AGAINST無法搜索3個字符或更少的單詞。所以我加了LIKE以及MATCH AGAINST一個查詢。在一個MySQL查詢中同時使用MATCH AGAINST和LIKE可以嗎?

搜索查詢: CSS和JavaScript尖端

數據庫條目:

id | subject 
------------------------------------ 
1 | ten useful css tricks 
------------------------------------ 
2 | performance tip for javascript 

MySQL查詢:

3字符的單詞:CSS,尖端

SELECT id, MATCH (subject) AGAINST ('css and javascript tip' IN BOOLEAN MODE) 
FROM articles WHERE MATCH (subject) AGAINST ('css and javascript tip') 
OR subject LIKE '%css%' OR subject LIKE '%tip%' 

此查詢適用於我的應用程序(使用小型數據庫)。我不確定隨着數據庫的增長它是否會引起任何問題。

這是在使用MATCH AGAINST時搜索3個字符單詞的正確方法嗎?如果沒有,就我提供的示例而言,我應該如何在同一時間尋找cssjavascript

回答

0

我用〜100K行來做,它不慢。 我認爲有替代品,但對我來說這仍然是不夠:)

下面是一個例子:

//... 
$tokens = explode(' ',$s)); 
$squery = ''; 
array_map('trim', $tokens); 

foreach($tokens as $token){ 
    if(strlen($token)>3) 
     $squery .= "+$token* "; 
    else 
     $where .= " AND title LIKE '%$token%'"; 
if(!empty($squery)) 
    $select .= " , MATCH (title) AGAINST ('$squery' IN BOOLEAN MODE) AS score " 
//... 
0

對於Windows用戶,您可以更改最小詞在MySQL的系統變量。編輯通常位於programdata/mysql/mysql服務器5.x目錄中的my.ini文件。有時你必須將my.ini文件複製到程序文件/ mysql/mysql服務器版本5.x中才能正常工作。因爲我已經經歷了Windows Server 2003和2008年,而第一個在Windows 7

插入下面的[mysqld]以下工作:

ft_min_word_len = 2 
ft_stopword_file = "" 

重啓MySQL,你可以在服務做到這一點,停止玩,或者你知道的。

然後重新索引你的表,確保引擎是MYISAM。儘管最近InnoDB也有效。

ft_stop_word_file是導致某些單詞從匹配中排除的單詞。如果您有停用詞文件,您可以將它等於「」或指向您想要的純文本文件。您可以創建自己的stopword文件示例mystopword.txt,裏面將用空格隔開單詞,您不希望將其包含在匹配中。