在数据库中查找类似的行

时间:2010-09-30 09:03:59

标签: sql database algorithm web-applications

我尝试设计我的应用程序以查找类似的数据库条目。

让我们以表 car 为例(一个表中的所有内容使示例变得简单):

CarID  |  Car Name  | Brand | Year | Top Speed | Performance | Displacement | Price
1         Z3          BMW     1990    250          5.4           123           23456
2         3er         BMW     2000    256          5.4           123           23000
3         Mustang     Ford    2000    190          9.8           120           23000

现在我想做那样的查询:

“搜索类似于Z3(所有品牌)的汽车”(忽略“汽车名称”)

在此上下文中类似意味着大多数列完全相同的行是最相似的。

在这个例子中它将是“3er BMW”,因为2列(性能和位移是相同的)

您能否给我提示如何设计数据库查询/应用程序。有很多条目,应用程序会非常大。

我也非常感谢有用的链接或书籍。 (如果我知道在哪里搜索或阅读什么,我可以进一步调查)

5 个答案:

答案 0 :(得分:3)

你可以尝试根据字段

给每条记录一个'得分'

您可以根据房产对比的重要程度来衡量一个列的分数(例如最高速度可能比品牌更重要)

您最终会得到每条记录的分数,您将能够通过比较分数并找到您正在查看的记录的+/- 5%(例如)的记录来查找类似的记录

答案 1 :(得分:2)

在数据中查找关系和相似性的方法称为Data Mining,在您的情况下,您可以尝试clusteringclassify您的数据,以便查看哪些不同的组出现。

我认为this book是介绍数据挖掘的良好开端。希望这会有所帮助。

答案 2 :(得分:2)

要解决您的问题,您必须使用cluster algorithm。首先,您需要定义一个相似性度量,而不是需要计算输入元组(所有Z3)与数据库其余部分之间的相似性。您可以使用算法加快流程,例如k-means。请看一下这个问题,你会在那里找到关于类似问题的讨论 - Finding groups of similar strings in a large set of strings

此链接也非常有用:http://matpalm.com/resemblance/

关于实现,如果你有很多元组(以及多台机器),你可以使用http://mahout.apache.org/。它是基于hadoop的机器学习框架。你需要很多计算能力,因为集群算法很复杂。

答案 3 :(得分:1)

查看其中一个现有搜索引擎,例如Lucene。他们实施了很多这样的事情。

本文可能也很有用:Supporting developers with natural language queries

答案 4 :(得分:1)

对你的问题不是一个真正的答案,但是你说你有很多条目,你应该考虑{c} {* 3}}你的车牌表,将Brand转移到一个单独的表格,将“Car name”/ model转移到一个单独的表格中。这将减少查找期间要比较的数据量。