我正在试着为产品建立一个过滤系统。产品有许多属性,包括价格、尺寸(厘米)和侧面。我想构造一个sql查询,它总是返回所有的产品,但是命令它们与搜索条件的符合程度。
例如,假设我有以下产品:
产品A
价格:250
尺寸:50
边数:4
产品B
价格:300
尺寸:60
边数:3
产品C
价格:200
尺寸:60
边数:5
并具有以下搜索条件:
价格:210-260美元
我要它回来:
产品A,产品C,产品B
A是第一个,因为它满足所有搜索条件。c领先于b,因为200美元最接近210-260美元的区间,而不是300美元。
这是一个相当简单的例子,但搜索可能涉及任何属性。
我脑子里的算法是对每个属性进行某种标准差计算,这会给你一个“分数”,说明该属性与搜索标准的符合程度,这些分数可以在一个产品中相加,从而得出产品的相关性的总分。是沿着正确的轨道吗?
我意识到这是一个相当复杂的问题,我真的只是寻找一些指导比什么都重要。
最佳答案
基本上,您必须为每一行提供一个“distance”函数,如果所有条件都匹配,则返回0,否则返回一个表示距离的正值。每个不同的列都有一定的权重,因为1美元的折扣并没有1个边长的折扣那么远。如果价格低于210,则未加权距离为(210-价格),如果价格高于260,则价格栏的未加权距离为(价格-260)。然后,您可以将加权距离w1*价格距离+w2*尺寸距离+s3*边距离相加。那你就可以按距离来订了。