我有一个 ajax 脚本,可以在数据库表中搜索类似于 google 搜索的表达式。SELECT 语句只使用 LIKE 并在相关字段中查找匹配项。起初它运行良好,但随着内容的增长,它为大多数搜索字符串提供了太多匹配项。
例如,如果你搜索 att,你会得到 att,但也会得到 attention、attaboy、buratta 等。
像谷歌这样的优秀搜索引擎似乎有一个经过其他人审查的中间建议表。他们似乎不是直接搜索数据,而是搜索批准的短语,例如 AT&T,并成功地缩小了结果的数量。有没有人编写过这样的代码并建议正确的 dbase 模式和查询以获得相关结果。
现在我正在直接搜索名称表,例如
$sql = "SELECT lastname from people WHERE lastname LIKE '%$searchstring%'";
我想除了人之外,我应该按照以下方式创建一些中间表
人们
id|firstname|lastname|description
好词
id|niceterm|peopleid
那么查询可能是:
$sql = "SELECT p.lastname,p.peopleid, n.niceterm, n.peopleid,
FROM `people` p
LEFT JOIN `niceterms` n
on p.id = n.peopleid
WHERE niceterm LIKE '%$searchterm%'";
..因此,当您在搜索框中键入内容时,您会得到很好的搜索词,从而产生更好的结果。
但是我如何填充 niceterms 表。这是正确的方法吗?我不是想创建一个完整的 backweb 或 pagerank。只想缩小搜索结果的范围,使其具有相关性。
感谢您的任何建议。