在一些类似于文章博客的内容中,会用到模糊搜索检索多个字段,对于检索后的结果排序可能并不满意。

例如:

在CSDN搜索一篇博文,在输入关键字后会检索文章的标题,内容,分类,标签等内容,但是检索的排序结果可能不太理想,比如想优先显示标题中带有此关键字的文章,不管是按主键或者时间排序都是不行的。

下面我就简单的说明一下遇到这种问题的几种解决办法:

  • 利用LOCATE函数(MySQL数据库),按照匹配度进行排序。

    locate(subStr,string) 函数返回subStr在string中出现的位置,返回结果大于0代表着subStr出现的位置(从开始就存在则为1,即如果string中存在subStr最小值为1),如果等于0则说明subStr不存在。

检索`name`和`memo`字段中存在'shx'的信息,并优先显示`name`字段中存在'shx'信息并且出现位置靠前的数据:

SELECT `name`,`memo`,locate('shx',`name`) as `order_name` FROM `cs_user`
where `name` like "%shx%" or `memo` like "%shx%"
order by `order_name` desc

检索`name`和`memo`字段中存在'shx'的信息,并优先显示`name`字段中存在'shx'信息并且出现位置靠前的数据,如果`name`字段中'shx'信息出现的位置相同或者都不存在,即`order_name`为0时,则优先显示`memo`字段中存在'shx'信息并且出现位置靠前的数据

SELECT `name`,`memo`,locate('shx',`name`) as `order_name`,locate('shx',`memo`) as `order_memo`  
FROM `cs_user`where `name` like "%shx%" or `memo` like "%shx%"
order by `order_name` desc,`order_memo` desc

  • 等待更新