1

データベース テーブル エンジン タイプでFullText検索を使用しています。MySQLMyISAM

今の問題は、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*ましたが、まだ動作しています。

4

2 に答える 2

2

ft_min_word は MySQL サーバーの設定です。したがって、ホスティング サーバーの場合、ini_set (PHP 用) で変更することはできません。サーバーは別のものであり、ホストに同じサーバーを使用する複数のユーザーがいる場合 (共有サーバーでは標準です)、同じ設定が使用されます。

同じことが .htaccess 設定にも当てはまります。これは、データベース サーバーの構成方法ではなく、Apache の反応 (変更が許可されている場合) のみを変更できます。

マニュアルでここで説明されている変数は、実行時に設定できる動的変数ではありません

だからあなたは試すことができます:

検索語の長さを確認し、ft_min_word で許可されている長さより短い場合は、LIKE('%searchterm%') を使用します。

于 2013-03-29T09:15:13.363 に答える
0

この行を変更

if(strlen($this->params['named']['q']) <= 3)
于 2013-03-29T09:08:17.210 に答える