我正在拼命尝试用 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/