三字符搜索不起作用[重复]

Posted

技术标签:

【中文标题】三字符搜索不起作用[重复]【英文标题】:three character search not working [duplicate] 【发布时间】:2013-03-19 23:22:36 【问题描述】:

我正在使用FullText 搜索mysql 我的数据库表引擎类型是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*,但现在仍在工作。

【问题讨论】:

@Jocelyn 正如我所说,我不想更改该变量...请在阅读之前不要关闭它... @Jocelyn 我已经强调了对您的近距离投票的回应 @DipeshParmar +1 提出好问题,等待正确答案。 【参考方案1】:

ft_min_word 是 MySQL 服务器的设置。在托管服务器的情况下,您无法在 ini_set(用于 php)中更改它。 服务器是独立的,如果您的主机有多个用户使用同一个服务器(这是共享服务器的标准),他们将使用相同的设置。

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

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

所以你可以试试:

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

【讨论】:

【参考方案2】:

改变这一行

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

【讨论】:

感谢您的回复,但这无济于事……但感谢您的回复。 你试过了吗?无论如何改变并看起来我希望这应该是问题

以上是关于三字符搜索不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

输入占位符css在IE9中不起作用[重复]

IE8 的 Javascript 占位符不起作用 [重复]

占位符属性在 Internet Explorer 中不起作用

HTML5 输入类型占位符在 IE 中不起作用

用于单选的所选插件的占位符文本不起作用

JQUERY刷新DIV后我的JS函数不起作用[重复]