我想展示类似产品所谓的产品变体。目前我正在做如下:
public IList<Product> GetVariants(string productName)
{
EFContext db = new EFContext(); //using Entity Framework
return db.Products
.Where(product = > product.ProductName == productName)
.ToList();
}
但是,这导致精确匹配,即当前产品本身。我想用 Levenshtein距离作为获得类似产品的基础。但是,在此之前,我想检查大多数开发人员为获取变体做了什么?
答案 0 :(得分:1)
我有效地使用Jaro-Winkler distance来解释我在一段时间内写过的系统中的拼写错误。 IMO,它比简单的编辑距离计算好得多,因为它可以相当有效地解决字符串长度。有关开源实现,请参阅SO上的this question。
我最终用C#编写它并将其作为SQL CLR函数导入SQL服务器,但它仍然相对较慢。它在我的案例中起作用主要是因为这种查询不经常执行(一天100-200)。
如果您期望大量流量,则必须构建索引以使这些查找更快。对此的一种策略是周期性地计算每对产品的每对产品之间的距离,并且如果距离超过特定阈值则将其存储在索引表中。要减少需要完成的工作量,您每天只能运行一次或两次,并且您可以将此限制为自上次运行以来的新记录或已修改记录。然后,您可以快速查找类似的产品并按距离订购。