绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
如何根据关键字匹配度排序
2019-12-05 14:24:38

近项目遇到根据关键字匹配度排序,要求关键字匹配相等排在,关键字匹配左边排第二,关键字匹配右边排第三,关键字匹配中间排后;遇到这样查询排序场景,用MySQL如何实现?用搜索引擎Elasticsearch如何实现?

方法一:按照上面需求用联合查询,可以实现方案,但是当数据量很大时,联合查询效率并不太好,不是佳方案

select id,name from 

(

select id,name from title where name like '海阔天空%' ORDER BY name asc

) as c1

UNION

select id,name from

(select id,name from title where name like '%海阔天空' ORDER BY name asc

) as c2

UNION

select id,name from

(select id,name from title where name like '%海阔天空%' ORDER BY name asc

) as c3

LIMIT 0, 10;

 

 

 

方法二: 部分实现方案,查询效率比联合查询稍微好些。

select id,name from channel where name like '%海阔天空%' order by replace(name, '海阔天空','') asc limit 0,10;

 

 

方法三:用搜索引擎Elasticsearch match方法,是佳方案。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

数据库风云圈
创建时间:2019-01-21 15:58:46
纵览数据库变幻风云,这里为你一一道尽。关于数据库你想知道的那些事,这里面可能都有。快来一起玩耍吧。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • u_9a3ed7a37f8e4a
    栈主

小栈成员

查看更多
  • 唐川ITPUB
  • boss_ch
  • Jack2k
  • 小雨滴
戳我,来吐槽~