我已经开始使用php pdo进行MySQL全文搜索了。我设置了全文索引,如下所示:
CREATE FULLTEXT INDEX ft_title ON booklist (title);
我也尝试过:
ALTER TABLE booklist ADD FULLTEXT ft_title (title);
两者似乎都正确设定了指数。
然后我按如下方式查询数据库:
$stmt = $this->pdo1->prepare("SELECT * FROM booklist WHERE MATCH(title) AGAINST(:value)");
try {
$stmt->execute(array(':value' => $val));
} catch (Exception $e) {
return false;
}
$code = $stmt->fetchAll(PDO::FETCH_ASSOC);
无论给$ val赋值,结果数组始终为空。没有给出错误消息。 (显然)数据库中确实存在许多匹配的条目。
我迷路了,不胜感激。
“SHOW VARIABLES LIKE'%ft%'”的结果:
ft_boolean_syntax + -><()~*:""&|
ft_max_word_len 84
ft_min_word_len 4
ft_query_expansion_limit 20
ft_stopword_file (built-in)
答案 0 :(得分:3)
您的桌子中有多少条符合搜索条件的记录?
默认情况下,如果匹配项出现在超过50%的记录中,则mysql全文搜索不会返回任何结果。
这意味着如果您的表中只有一条记录,或者只有2条记录,那么无论您搜索什么记录,您都将无法获得任何结果。
要简短说明,您的表格中至少需要3条记录,其中只有一条记录必须符合您的搜索条件才能获得任何结果。
当您刚开发项目并且表中只有1行或2行时,这是一种常见情况,然后尝试完整的测试搜索不会返回任何内容。