1

我想展示类似的产品,即产品的变体。目前我正在这样做:

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

但是,这会导致完全匹配,即当前产品本身。我正在考虑使用Levenshtein Distance作为获得类似产品的基础。但是,在此之前,我想检查大多数开发人员为获取变体所做的工作?

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

1 回答 1

1

我有效地使用了Jaro-Winkler 距离来解决我不久前写的一个系统中的拼写错误。IMO,它比简单的编辑距离计算要好得多,因为它可以相当有效地考虑字符串长度。 有关开源实现,请参阅SO 上的这个问题。

我最终用 C# 编写它并将其作为SQL CLR函数导入 SQL Server ,但它仍然相对较慢。它在我的情况下很有效,主要是因为此类查询很少执行(一天 100-200 次)。

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

于 2013-04-18T02:45:05.117 回答