三个字符搜索不起作用

时间:2013-03-29 08:59:57

标签: php mysql full-text-search character-limit

我正在使用FullTextMySQL中搜索我的数据库表引擎类型为MyISAM

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

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

  

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

那么我怎么能在mysql Query中使它工作。

我认为当单词少于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*,但现在仍然在工作。

2 个答案:

答案 0 :(得分:2)

ft_min_word是MySQL服务器的设置。在托管服务器的情况下,您不能在ini_set(这是为PHP)中更改它。 服务器是单独的,如果您的主机有多个用户使用相同的服务器(这是共享服务器上的标准服务器),他们将使用相同的设置。

.htaccess设置也是如此:这只能改变apache的反应方式(如果允许更改),而不是数据库服务器的配置方式。

描述here in the manual的变量不是可以在运行时设置的dynamic variable

所以你可以尝试:

检查搜索词的长度,然后,如果它小于ft_min_word允许的值,则使用LIKE('%searchterm%')

答案 1 :(得分:0)

更改此行

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