前幾天接到一個新的需求:在模糊查詢的情況下實現,查詢結果按照精准度高低進行排序展示
即:結果與查詢關鍵字完全一致的優先級最高,其次按照查詢結果中關鍵字出現的詞頻從高到低排序。
之前有接觸過搜索一般都有專門的搜索框架來做搜索的事情,比如solr,ES。
現在只在一個功能的模糊查詢上來做:研究了一下,還是可以實現的,例子如下:
select distinct name,age from (
select id,name,age from teacher t where namelike '%小%'
union all
select id,name,age from student s where namelike '%小%')as aa
order by (
case when aa.name = '小' then 1
when aa.name like '%小%' then 2 else 0 end
) asc,(select LENGTH(aa.name) - LENGTH(REPLACE(aa.name,'小',''))) desc;
當然,還可以根據自己的業務需求加其他的過濾條件。(僅供參考!)