按多列评分数据库条目

Mat*_*ias 1 sql scoring

我遇到了一种情况,我必须找到用户搜索请求的最佳匹配.我将提供一个例子(一点摘要):

我们有律师的桌子:


Name       Location   Royality    Family Law   Criminal Law
-------------------------------------------------------------
Lawyer A   Berlin     100 €/hour  false        true
Lawyer B   Amsterdam  150 €/hour  true         true

用户现在应该能够通过多个功能进行搜索.每个特征的权重应该是某种参数.在我的例子中,该表包含更多此类功能(位置,Royality,20 +布尔值).当然,结果应该提供所有"好"的结果,但是通过某种"得分"排序,所以最好的结果出现在顶部.

我不是在寻找一个开箱即用的解决方案,而不是一些关于这个主题的介绍.

亲切的问候,

亚光

Ric*_*iwi 6

一般方法是为每个项目分配权重,并在它们匹配时添加它们.这将导致全表扫描对每条记录进行评分.

假设柏林输入,> 100 /小时,刑法=真,家庭法=无(无标准)和位置匹配的重量为5

select *
from (
    select *,
      case when location = 'berlin' then 5 else 0 end +
      case when royality >= 100 then 1 else 0 end +
      case when familylaw = null then 1 else 0 end +
      case when criminallaw = true then 1 else 0 end as score
    from tbl
) scored
order by score desc
Run Code Online (Sandbox Code Playgroud)