2013-03-29 63 views
1

我正在使用FullTextMySQL中搜索我的數據庫表引擎類型爲MyISAM三個字符搜索不起作用

現在的問題是,我想允許使用搜索記錄,如果他們已經輸入三個單詞。

但問題是,FullText不允許我搜索少於4個字符的記錄。

我知道我可以改變ft_min_word_len,使其工作,但是當我將它上傳我需要改變它在服務器上,我使用共享主機,以便其難。

那麼我怎麼能讓它在mysql查詢中工作。

我認爲當字少於4個字符使用LIKE子句和當它比4使用fulltext,這是正確的方式嗎?

代碼

App::import('Sanitize'); 

if(strlen($this->params['named']['q']) <= 4) 
{ 
    $lessWord = "+".$this->params['named']['q']; 
} 
else 
{ 
    $lessWord = $this->params['named']['q']; 
} 

$escapedQuery = str_replace(" ","* ",Sanitize::escape($lessWord)).'*'; 

array_push($this->paginate['conditions'],"MATCH(ServiceRequest.title, ServiceRequest.description) AGAINST ('".$escapedQuery."' IN BOOLEAN MODE)"); 

$this->paginate['fields'] = array 
(
    '*', 
    "MATCH(ServiceRequest.title, ServiceRequest.description) AGAINST ('".$escapedQuery."' IN BOOLEAN MODE) AS score" 
); 
$this->paginate['order'] = "score DESC"; 

我已經在上面的代碼中使用。

是否可以搜索三個字符?

我也試過+str*,但現在仍在工作。

+0

@Jocelyn正如我所說我不想改變這個變量......請在閱讀它之前不要關閉它...... –

+0

@Jocelyn我已經突出顯示了對你的迴應關閉有問題的投票 –

+0

@DipeshParmar +1爲好問題,等待正確的答案。 –

回答

2

ft_min_word是MySQL服務器的設置。在託管服務器的情況下,您不能在ini_set(用於PHP)中更改它。 服務器是獨立的,如果你的主機有多個用戶使用相同的服務器(這是共享服務器上的標準服務器),他們將使用相同的設置。

這同樣適用於.htaccess設置:這隻能改變apache將如何反應(如果允許更改),而不是如何配置數據庫服務器。

變量,描述here in the manual是不是可以在運行時設置一個dynamic variable

所以,你可以嘗試:

檢查搜索詞的長度,那麼,如果是小於允許通過ft_min_word ,使用LIKE('%searchterm%')

0

改變這一行

if(strlen($this->params['named']['q']) <= 3) 
+0

Thanx的答覆,但這不會幫助...但thanx的答覆。 –

+0

你試過了嗎?無論如何改變,看看我希望應該是可能的 –

+0

我已經做到了 –