【问题标题】:Against not returning score反对不返回分数
【发布时间】:2011-05-06 18:50:45
【问题描述】:

这个查询有问题吗?这个有时有效,有时无效。例如,“七”这个词不返回任何分数,但我知道它至少出现在正文中的 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

【问题讨论】:

  • 您是否分别检查过? SQL 并没有很好地添加 NULL...

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    问题
    如果单词太常见,即出现在 50%+ 的行中,MySQL 会认为它是一个 STOP-word,不会匹配它。
    然后是停用词列表(您已经注意到了)
    见: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

    【讨论】:

    • 在这种情况下禁用它们不是一个选项。
    • @Sein Kraft,如果您无法更改停用词列表,那么我认为就match against 而言,您不走运。
    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2019-09-26
    相关资源
    最近更新 更多