MYSQL搜索排序:根据搜索匹配的权重进行从高到低排序
-1-like
select (if(LOCATE('tomcat',notetitle),1,0)+ if(LOCATE('nginx',notetitle),1,0)+if(LOCATE('linux',notetitle),1,0))
as score,notetitle from technicalnote
where notetitle like'%tomcat%' or notetitle like '%nginx%' or notetitle like '%linux%' order by score desc
-2- 全文索引
SELECT id, title, content, MATCH(title, content) AGAINST('MySQL' IN NATURAL LANGUAGE MODE) AS relevance FROM articlesWHERE MATCH(title, content) AGAINST('MySQL' IN NATURAL LANGUAGE MODE)ORDER BY relevance DESC;
在这个查询中,我们在 title 和 content 列中查找与关键词 “MySQL” 相关的文章,并按照相关性排序。
+:表示该 word 必须存在
-:表示该 word 必须不存在
(no operator):表示该 word 是可选的,但是如果出现,其相关性会更高
@distance:表示查询的多个单词之间的距离是否在 distance 之内,distance 的单位是字节,这种全文检索的查询也称为 Proximity Search,如 MATCH(context) AGAINST('"Pease hot"@30' IN BOOLEAN MODE)语句表示字符串 Pease 和 hot 之间的距离需在 30 字节内
>:表示出现该单词时增加相关性
<:表示出现该单词时降低相关性
~:表示允许出现该单词,但出现时相关性为负
* :表示以该单词开头的单词,如 lik*,表示可以是 lik,like,likes
" :表示短语
详细实例:https://www.jb51.net/database/327038p30.htm