我设置了一个Mysql表,用于跨标题和内容(正文)列进行全文搜索。
我试图把最相关的结果放在最上面,但我得到了很多垃圾。
我有3个全文索引,一个用于标题,一个用于正文,一个用于标题和正文,因此我可以执行以下查询:
SELECT id, url, title, body, earliestCapture, responseYear, urlScore,
MATCH (title) AGAINST ("jurassic park" IN BOOLEAN MODE) AS titleScore,
MATCH (body) AGAINST ("jurassic park" IN BOOLEAN MODE) AS bodyScore,
(SELECT (titleScore * 100 + bodyScore)) AS finalscore
FROM Entries
WHERE MATCH (title,body) AGAINST ("jurassic park" IN BOOLEAN MODE)
ORDER BY finalScore DESC LIMIT 0,1000;
我正在尝试将标题的分数乘以100,以将标题中包含该术语的实例放在顶部。
这确实有帮助,但如果正文中有park
这个词重复了很多次,即使没有Jurassic
这个词出现一次,那么这一行将被推到搜索结果的顶部。
一个很好的例子是当我搜索"英特尔奔腾"时。有几行正文在情报/信息上下文中使用intel
这个词,而不是公司名称,这个词重复了数百次,即使没有pentium
这个词的实例,这些页面总是在顶部。
我真的被这个惹恼了。有人知道如何改进搜索结果吗?
谢谢!
您必须在两个搜索条件后面加上+,以便只显示两个都见manual
的结果。SELECT id, url, title, body, earliestCapture, responseYear, urlScore,
MATCH (title) AGAINST ("+jurassic +park" IN BOOLEAN MODE) AS titleScore,
MATCH (body) AGAINST ("+jurassic +park" IN BOOLEAN MODE) AS bodyScore,
(SELECT (titleScore * 100 + bodyScore)) AS finalscore
FROM Entries
WHERE MATCH (title,body) AGAINST ("+jurassic +park" IN BOOLEAN MODE)
ORDER BY finalScore DESC LIMIT 0,1000;