1

我在我的数据库表引擎类型中使用FullText搜索是.MySQLMyISAM

现在的问题是,如果他们输入了三个单词,我想允许使用搜索记录。

但问题是FullText不允许我搜索少于 4 个字符的记录。

我知道我可以进行更改ft_min_word_len以使其正常工作,但是当我上传它时,我需要在服务器上进行更改,而且我使用的是共享主机,所以很难。

那么我怎样才能让它在 mysql Query 中工作。

我认为当 word 少于 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";

我已经使用了上面的代码。

是否可以搜索三个字符?

我也尝试过+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 回答