MySQL按相关性排序

Fra*_*ser 9 mysql sql-order-by

我有一个搜索表单,搜索网站内容表以取回适当的结果.

我想搜索标题和内容字段,并按相关性顺序拉回结果.给予标题最高优先级.

假设我们有一个表(tblContent)

intID | strTitle    | txtContent

1     | Smith John  | Lorem Ipsum
2     | Lorem Ipsum | Lorem John Smith Ipsum
3     | John Smith  | Lorem Ipsum Lorem Ipsum
4     | Lorem Ipsum | Lorem Ipsum Lorem Ipsum
5     | Lorem Ipsum | Lorem Ipsum Smith John
Run Code Online (Sandbox Code Playgroud)

而你正在寻找"约翰史密斯",结果应该以3,2,1,5的顺序返回

这怎么可能?

Fra*_*ser 19

我设法得到了相当的信息:

SELECT *, 
( (1.3 * (MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE))) + (0.6 * (MATCH(txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE)))) AS relevance 
FROM content 
WHERE (MATCH(strTitle,txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE) ) 
ORDER BY relevance DESC
Run Code Online (Sandbox Code Playgroud)

  • 我不知道这个查询中发生了什么。有人可以在其中添加文档吗? (2认同)

Reh*_*nis 5

mysql 全文搜索是个好东西,但它有最少 4 个字符的索引单词的限制。尽管可以更改限制,但并非在所有情况下都可以更改服务器变量。在这种情况下,我建议按案例顺序建议的解决方案

select 
    *
from
mytable a
WHERE
    (a.title like 'somthing%'
    OR a.title like '%somthing%'
    OR a.title like 'somthing%')
ORDER BY case
WHEN a.title LIKE 'somthing%' THEN 1
WHEN a.title LIKE '%somthing%' THEN 2
WHEN a.title LIKE '%somthing' THEN 3
ELSE 4 END;
Run Code Online (Sandbox Code Playgroud)