我遇到了一种情况,我必须找到用户搜索请求的最佳匹配。我将提供一个例子(一点摘要):
我们有律师的桌子:
Name Location Royality Family Law Criminal Law
-------------------------------------------------------------
Lawyer A Berlin 100 €/hour false true
Lawyer B Amsterdam 150 €/hour true true
用户现在应该能够通过多种功能进行搜索。每个特征的权重应该是某种参数。在我的例子中,该表包含更多此类功能(位置,Royality,20 +布尔值)。当然结果应该提供所有“好”的结果,但是以某种“得分”排序,所以最好的结果出现在顶部。
我不是在寻找开箱即用的解决方案,而是寻找这个主题的一些介绍。
亲切的问候,
亚光
答案 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所述。