我已经开始使用 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)
最佳答案
您的表中有多少条记录符合您的搜索条件?
默认情况下,如果匹配项出现在超过 50% 的记录中,mysql 全文搜索将不会返回任何结果。
这意味着如果您的表中只有一条记录,或者只有 2 条记录,那么无论您搜索什么,都永远得不到结果。
简而言之,您的表中至少需要 3 条记录,并且只有其中一条记录必须符合您的搜索条件才能返回任何结果。
当您刚刚开发项目并且表格中只有 1 或 2 行时,这是一种常见的情况,然后尝试完整的测试搜索不会返回任何内容。
关于使用 PDO 进行 PHP 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8454961/