MySQL LIKE 语句实现权重排序(title 权重高于 content)

2026-06-25 31 浏览 0 评论

MySQL 的 LIKE 本身没有内置权重 ,但可以通过 CASE 表达式 / 字段权重计分 的方式,手动给匹配到的字段设置优先级,让 title 匹配的结果排在最前面。

核心思路

  1. OR 同时在 titlecontent 中模糊匹配
  2. 给匹配结果 打分
  • title 匹配 → 最高分(如 10 分)
  • content 匹配 → 低分(如 1 分)
  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;

总结

  1. 小数据量 :用 CASE + ORDER BY 实现 LIKE 权重排序,简单直接
  2. 大数据量 :用 全文索引 ,性能更高、权重配置更灵活
  3. 核心: 手动给匹配字段打分,按分数排序 就能实现自定义权重

发布评论

发布评论前请先 登录
取消
0 评论
点赞
收藏

评论列表 0

暂无评论