使用 PDO 进行 PHP 全文搜索

标签 php mysql full-text-search

我已经开始使用 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/

相关文章:

php - cron 上的 MySQL 查询重叠,忽略 'locked' 行

MySQL GROUP BY 和 ORDER BY 命令

mysql - 你怎么能看到来自mysql客户端的字段注释?

mysql - 与 Solr 相比,MyISAM 在 Django 搜索方面的扩展性如何?

javascript - 为表中的每一行创建mysql删除链接,使用ajax删除它并更新表列表

php - 如何使用 PHP 原生函数和 Android 获取文件

JOIN 查询的 Php pdo 结果

mysql - 将行转换为mysql中的列

php - 在 MyISAM 中使用全文搜索匹配精确值

mysql - mysql 中的全文搜索不会检索所有行