按多列评分数据库条目

时间:2011-03-17 11:44:26

标签: 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 +布尔值)。当然结果应该提供所有“好”的结果,但是以某种“得分”排序,所以最好的结果出现在顶部。

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

亲切的问候,

亚光

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以在特定的RDBMS中使用SOUNDEX功能。这些比较两个字符串并给出“它们听起来有多相似”的数值。

然后,您可以对每列的结果进行加权和/或求和,如Richard所述。