我尝试通过相关性返回全文搜索结果时,我没有得到预期的结果。这是一个实际的输出查询示例:
SELECT *,
((9 * (MATCH(title) AGAINST ('"apple 8"' IN BOOLEAN MODE))) +
(8 * (MATCH(title) AGAINST ('+apple +8' IN BOOLEAN MODE))) +
(7 * (MATCH(title) AGAINST ('apple* 8 ' IN BOOLEAN MODE))) +
(6 * (MATCH(description) AGAINST ('"apple 8"' IN BOOLEAN MODE))) +
(5 * (MATCH(description) AGAINST ('+apple +8 apple* 8 ' IN BOOLEAN MODE)))) as relevance
FROM items
WHERE status='1'
AND ((MATCH(title, description) AGAINST ('"apple 8" +apple +8 apple* 8 ' IN BOOLEAN MODE)))
ORDER BY cat_featured DESC
, relevance DESC
我确定这可能都搞砸了,但我尝试了不同的设置并继续得到相同的结果......在这个例子中,标题中包含“apple”和“8”的项目正在返回55个结果中的第17个,而不是像我希望的那样的第1个,因为它是唯一具有标题中的两个术语的结果。我哪里错了?
答案 0 :(得分:0)
将(MATCH(xyz) AGAINST('abc'))
与任何数字相乘是错误的。你不能这样做,因为它们不是实际数字。
答案 1 :(得分:0)
这是做类似事情的基本示例。希望这会有所帮助。
在此之前,你需要在这两个cols上构建一个FULLTEXT索引。如果你使用的是phpMyadmin,这很容易。
https://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html
select *, MATCH(title, description) AGAINST("your string here" IN BOOLEAN MODE) AS relevance
from items
where
active = 1 and
MATCH(title, description) AGAINST("your string here" IN BOOLEAN MODE) order by relevance desc