我尝试设计我的应用程序以查找类似的数据库条目。
让我们以表 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列(性能和位移是相同的)
您能否给我提示如何设计数据库查询/应用程序。有很多条目,应用程序会非常大。
我也非常感谢有用的链接或书籍。 (如果我知道在哪里搜索或阅读什么,我可以进一步调查)
答案 0 :(得分:3)
你可以尝试根据字段
给每条记录一个'得分'您可以根据房产对比的重要程度来衡量一个列的分数(例如最高速度可能比品牌更重要)
您最终会得到每条记录的分数,您将能够通过比较分数并找到您正在查看的记录的+/- 5%(例如)的记录来查找类似的记录
答案 1 :(得分:2)
在数据中查找关系和相似性的方法称为Data Mining,在您的情况下,您可以尝试clustering和classify您的数据,以便查看哪些不同的组出现。
我认为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转移到一个单独的表格中。这将减少查找期间要比较的数据量。