根据()相关性排序mysqls MATCH(),顶部为完整数学

根据()相关性排序mysqls MATCH(),顶部为完整数学,mysql,match,match-against,against,Mysql,Match,Match Against,Against,在今天的比赛中,我在使用mysqls比赛时遇到了问题 因为我想这可能更容易解决我的问题,我创建了一个小的 我完全理解,为什么Foo-Bar-Foo比Foo-Bar在这个Select语句的工作方式上更相关。但是我想要的是,完全匹配的术语比完全匹配和稍微多一些的术语具有更高的相关性 title relevance Foo Bar 0.046829063445329666 Foo Bar Foo 0.031219376251101494 Foo 0

在今天的比赛中,我在使用mysqls比赛时遇到了问题

因为我想这可能更容易解决我的问题,我创建了一个小的

我完全理解,为什么Foo-Bar-Foo比Foo-Bar在这个Select语句的工作方式上更相关。但是我想要的是,完全匹配的术语比完全匹配和稍微多一些的术语具有更高的相关性

title         relevance
Foo Bar       0.046829063445329666
Foo Bar Foo   0.031219376251101494
Foo           0
Bar           0  
如果不使用union组合两个语句,这个结果可能吗

感谢Gordon Linoff的回答:

SELECT *
FROM FOOBAR
WHERE title LIKE '%Foo Bar%'
ORDER BY (CASE WHEN title LIKE 'Foo Bar%' THEN 1 ELSE 0 end) DESC,
         MATCH (title) AGAINST ('Foo Bar' IN BOOLEAN MODE) ASC

你可以按顺序做你想做的事。一种方法是计算匹配的不同单词的数量,然后在每组中按相关性升序排列:

SELECT fb.*,
       MATCH (title) AGAINST ('+Foo +Bar' IN BOOLEAN MODE) AS relevance
FROM FOOBAR fb
ORDER BY ((case when title like '%Foo%' then 1 else 0 end) +
          (case when title like '%Bar%' then 1 else 0 end)
         ) desc,
         relevance asc

这就是您想要的示例数据。一般来说,它可能不起作用,因为相关性计算除了单词匹配的次数和字符串的长度之外,还有其他因素。

这正是我想要的!谢谢我将用我的-略微修改的版本更新startpost: