如何在高级MySQL查询中增加相关性值?

时间:2009-11-24 23:49:00

标签: mysql full-text-search

我有类似以下的MySQL查询:

SELECT *, MATCH (`Description`) AGAINST ('+ipod +touch ' IN BOOLEAN MODE) * 8 + MATCH(`Description`) AGAINST ('ipod touch' IN BOOLEAN MODE) AS Relevance
FROM products WHERE ( MATCH (`Description`) AGAINST ('+ipod +touch' IN BOOLEAN MODE) OR MATCH(`LongDescription`) AGAINST ('+ipod +touch' IN BOOLEAN MODE) )
HAVING Relevance > 1
ORDER BY Relevance DESC

现在,我通过搜索UPC使查询更加先进:

SELECT *, MATCH (`Description`) AGAINST ('+ipod +touch ' IN BOOLEAN MODE) * 8 + MATCH(`Description`) AGAINST ('ipod touch' IN BOOLEAN MODE) + `UPC` = '123456789012' * 16 AS Relevance
FROM products WHERE ( MATCH (`Description`) AGAINST ('+ipod +touch' IN BOOLEAN MODE) OR MATCH(`LongDescription`) AGAINST ('+ipod +touch' IN BOOLEAN MODE) ) AND `UPC` = '123456789012'
HAVING Relevance > 1
ORDER BY Relevance DESC

这将返回结果,但我在UPC上成功匹配的事实并没有增加Relevance的值。我是否可以仅使用MATCH()AGAINST()?

等全文搜索进行此类计算

澄清:好的,我真正的问题是,为什么以下没有相关性> = 16?

SELECT `UPC`, `UPC` = '123456789012' * 16 AS Relevance FROM products WHERE `UPC` = '123456789012' HAVING Relevance > 1 ORDER BY Relevance DESC

1 个答案:

答案 0 :(得分:0)

首先,我认为在SELECT中再次使用UPC = '123455778'是多余的。你不会得到任何不正确的行,所以为什么不使用“1”?

话虽如此,我认为您的问题是运营秩序。将括号中的比较括在我身上:

SELECT 
    `UPC`,
    (`UPC` = '12346790') * 16 AS Relevance
FROM 
    `products`
WHERE
    `UPC` = '12346790'
HAVING
    Relevance > 1
ORDER BY 
    Relevance DESC