0

我认为这是一个长镜头......

我的数据库有以下字段:title, description, date, price, hash

目前,我像这样生成一个 MD5 哈希md5($title.$desc.$date.$price)并将其放置在hash每个项目的字段中,这样当一个新项目添加到数据库中时,我有一种简单且相当可靠的方式来了解具有相同详细信息的项目是否已经存在数据库。

我想做的是扩展这个,所以匹配过程有点模糊。原因是我在数据库中看到很多重复的项目,其中描述可能只有一两个字符不同,或者价格可能略有不同。

数据库很大(3mill 行)并且是 INNODB。如果这提供了一种在从搜索返回时过滤掉类似结果的方法,我也可以使用 Sphinx。

4

2 回答 2

1

那么 Sphinx(或其他“搜索引擎”)将需要类似的“哈希”计算才能在查询时删除重复项。

在 sphinx 可能会帮助您的地方,当您将项目插入数据库时​​,请使用 sphinx 在数据库中运行类似项目的搜索。您可以获得潜在重复的“排名”列表。如果最上面的项目得分很高,您可以说它非常相似,然后将该事实存储在数据库中。

(我是怎么做的,在表上有一个名为“grouper”的第二列,默认情况下它只是复制项目的主键。但是如果找到重复项,则改为将其更改为它复制的项目的 PK。然后可以在那个石斑列上运行一个mysql(或狮身人面像!)GROUP BY)

于 2013-07-23T12:55:34.583 回答
0

您可以在描述中使用 SOUNDEX(用于处理略有不同的单词拼写)。

http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_soundex

对于价格,如果您在创建 MD5 之前将其四舍五入到最接近的 10(或任何合理的值),它应该可以处理小的差异。

于 2013-07-23T12:49:32.050 回答