データベース テーブル エンジン タイプでFullText
検索を使用しています。MySQL
MyISAM
今の問題は、3 つの単語を入力した場合にレコードを検索できるようにしたいということです。
しかし、問題はFullText
、4文字未満のレコードを検索できないことです。
変更して機能させることができることはわかって
ft_min_word_len
いますが、アップロードするときにサーバーで変更する必要があり、共有ホストを使用しているため難しいです。
では、どうすればmysqlクエリで機能させることができますか。
単語が 4 文字未満の useLIKE
句の場合と、4 文字を超える場合のuse だと思いますが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";
上記のコードを使用しました。
3文字で検索できますか?
私も試し+str*
ましたが、まだ動作しています。