MySQL LIKE 语句实现权重排序(title 权重高于 content)
MySQL 的 LIKE 本身没有内置权重 ,但可以通过 CASE 表达式 / 字段权重计分 的方式,手动给匹配到的字段设置优先级,让 title 匹配的结果排在最前面。
核心思路
- 用
OR同时在title和content中模糊匹配 - 给匹配结果 打分 :
title匹配 → 最高分(如 10 分)content匹配 → 低分(如 1 分)
- 按 分数倒序排序 ,实现权重效果
实战代码(最常用方案)
1. 基础权重排序(推荐)
SELECT *
FROM articles
WHERE
title LIKE '%关键词%'
OR content LIKE '%关键词%'
ORDER BY
-- 权重规则:title 匹配 = 10 分,否则 0 分;content 匹配 =1 分,否则 0 分
(CASE WHEN title LIKE '%关键词%' THEN 10 ELSE 0 END) DESC,
(CASE WHEN content LIKE '%关键词%' THEN 1 ELSE 0 END) DESC;2. 合并权重分数(更灵活)
SELECT
*,
-- 计算总权重分数
(CASE WHEN title LIKE '%关键词%' THEN 10 ELSE 0 END) +
(CASE WHEN content LIKE '%关键词%' THEN 1 ELSE 0 END) AS weight
FROM articles
WHERE
title LIKE '%关键词%'
OR content LIKE '%关键词%'
ORDER BY weight DESC; -- 按权重从高到低排序效果说明
- 只要 title 包含关键词 ,无论 content 是否包含,都会排在最前面
- 仅 content 包含关键词 的结果排在后面
- 同时匹配 title + content 的结果权重最高(10+1=11 分)
你可以自由调整分数:
- 想让 title 权重更高 → 把 10 改成 100
- 想让 content 权重更低 → 把 1 改成 0.5
进阶:全文检索(大数据量推荐)
如果你的数据量很大(百万级以上), LIKE '%关键词%' 无法使用索引,效率极低,推荐用 MySQL 全文索引 ,天然支持权重排序:
步骤 1:创建全文索引
ALTER TABLE articles
ADD FULLTEXT INDEX ft_title_content (title, content);步骤 2:带权重的全文检索
SELECT
*,
-- 给 title 权重 5 倍,content 1 倍
(MATCH(title) AGAINST('关键词') * 5) +
MATCH(content) AGAINST('关键词') AS score
FROM articles
WHERE
MATCH(title, content) AGAINST('关键词')
ORDER BY score DESC;总结
- 小数据量 :用
CASE+ORDER BY实现 LIKE 权重排序,简单直接 - 大数据量 :用 全文索引 ,性能更高、权重配置更灵活
- 核心: 手动给匹配字段打分,按分数排序 就能实现自定义权重





