反对不回归得分

时间:2011-05-06 18:50:46

标签: mysql sql full-text-search match-against

此查询有问题?这个有时工作,有时不工作。例如,单词“seven”不会返回任何分数,但我知道它至少出现在29行中,但是它返回得分为0。

换句话说,它可以正常运行,但不适用于此。任何人都知道为什么或有一个不同的解决方案按相关性排序?

   SELECT *, 
         ( (MATCH(articles.name) AGAINST('seven'))*5 +
           (MATCH(articles.subtitle) AGAINST('seven'))*3 + 
           (MATCH(articles.body) AGAINST('seven'))) AS search_score 
     FROM articles 
LEFT JOIN matches ON articles.match=matches.id 
 ORDER BY search_score DESC
编辑:我注意到'七'是一个停用词。还有其他方法吗? stopwords

2 个答案:

答案 0 :(得分:0)

在每个分数周围添加COALESCE(值,0)。

答案 1 :(得分:0)

<强>问题
如果这个词太常见了,即出现在50%以上的行中,MySQL认为它是一个STOP字,并且不会与它匹配。
然后是停用词列表(你已经注意到了)
请参阅:http://dev.mysql.com/doc/refman/5.5/en/fulltext-stopwords.html

<强>解决方案
这个回答:where to edit mysql fulltext stopword lists?
告诉您如何覆盖/替换默认的停用词列表。

以下是MySQL文档页面的链接:http://dev.mysql.com/doc/refman/5.5/en/fulltext-fine-tuning.html