mysql fulltext布尔搜索 - 按相关性排序

时间:2011-09-20 21:37:49

标签: mysql full-text-search

我尝试通过相关性返回全文搜索结果时,我没有得到预期的结果。这是一个实际的输出查询示例:

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个,因为它是唯一具有标题中的两个术语的结果。我哪里错了?

2 个答案:

答案 0 :(得分:0)

(MATCH(xyz) AGAINST('abc'))与任何数字相乘是错误的。你不能这样做,因为它们不是实际数字。

在此处阅读更多Using MySQL Full-text Searching

答案 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