显示类似产品或变体

时间:2013-04-18 02:36:46

标签: c# asp.net-mvc

我想展示类似产品所谓的产品变体。目前我正在做如下:

public IList<Product> GetVariants(string productName)
{
    EFContext db = new EFContext();  //using Entity Framework
    return db.Products
           .Where(product = > product.ProductName == productName)
           .ToList();
}

但是,这导致精确匹配,即当前产品本身。我想用 Levenshtein距离作为获得类似产品的基础。但是,在此之前,我想检查大多数开发人员为获取变体做了什么?

  1. 使用Levenshtein距离好吗?它是否在工业中用于此目的?
  2. 我是否必须在数据库中添加另一个表,同时将产品添加到数据库中,以显示产品的变体?

1 个答案:

答案 0 :(得分:1)

我有效地使用Jaro-Winkler distance来解释我在一段时间内写过的系统中的拼写错误。 IMO,它比简单的编辑距离计算好得多,因为它可以相当有效地解决字符串长度。有关开源实现,请参阅SO上的this question

我最终用C#编写它并将其作为SQL CLR函数导入SQL服务器,但它仍然相对较慢。它在我的案例中起作用主要是因为这种查询不经常执行(一天100-200)。

如果您期望大量流量,则必须构建索引以使这些查找更快。对此的一种策略是周期性地计算每对产品的每对产品之间的距离,并且如果距离超过特定阈值则将其存储在索引表中。要减少需要完成的工作量,您每天只能运行一次或两次,并且您可以将此限制为自上次运行以来的新记录或已修改记录。然后,您可以快速查找类似的产品并按距离订购。