具有相关性的 PHP PDO 搜索引擎

标签 php mysql pdo

我正在拼命尝试用 PHP、mySQL 和 PDO 创建一个相对简洁的搜索引擎。我有一个书籍数据库,我正在尝试查询针对其中两个字段的搜索。这是我目前所拥有的:

"SELECT id, title, author, isbn, MATCH(title, isbn) AGAINST (:term) AS score FROM %sbooks WHERE MATCH(title, isbn) AGAINST (:term) AND is_active = 'y' ORDER BY score DESC LIMIT 0,25");
$sth->execute(array(':term'=>'+'.$keywords));

$keywords 是来自搜索字段的字符串,因此可能类似于“某种书籍”。

我不想过滤掉任何单词或做任何太花哨的事情,但上面的查询忽略了很多结果,即使我将其置于 bool 模式也是如此。

此外,我在数据库中有两本书,“书号 1”和“书号 2”。如果我搜索“第 2 本书”,那么它仍会为“第 1 本书”打分。然而,主要问题是很多搜索都没有返回任何结果:(

无论如何可以帮助建议我在这里做错了什么吗?

最佳答案

所有少于三个字母的单词都将被忽略。因此,标题末尾的 1 和 2 将被忽略。您可以更改此设置:

http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html

与 ISBN 匹配也没有用,因为从 MySQL 的角度来看这不是一个词。

我认为如果你想做得好,你应该发明自己的搜索引擎。

关于具有相关性的 PHP PDO 搜索引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2235543/

相关文章:

php - 使用 PHPExcel 设置列宽不起作用

php - fatal error : Call to undefined function: ldap_connect()

MySQL 多重连接和不同计数

php 调用存储过程并出现 pdo 问题

php - pdo 直接将图像插入数据库 - 总是插入 BLOB - 0B

php - 持久性 PDO mysql 连接替代方案

php - 替换字符串php中的最后一个斜杠

带有变量的 php foreach

python - 无法在 jupyter 笔记本中使用 mysql.connector 8.0 使用正确的语法执行查询

mysql - 是否可以使用通配符来检查 SQL 中的数字列?