【发布时间】:2011-08-10 20:04:21
【问题描述】:
我正在尝试开发一种方法来获取具有多个属性的实体并在数据库中搜索类似的实体(以正确的顺序匹配尽可能多的属性)。这个想法是,它会返回相似程度的百分比。
还要考虑属性的顺序,所以开头的属性比结尾的更重要。
例如:
第 1 项 - A、B、C、D、E
第 2 项 - A、B、C、D、E
100% 匹配
第 1 项 - A、B、C、D、E
第 2 项 - B、C、A、D、E
这不会是完美的匹配,因为属性的顺序不同
第 1 项 - A、B、C、D、E
第 2 项 - F、G、H、I、A
将是一个低匹配,因为只有一个属性是相同的并且它在位置 5
此算法将运行成千上万条记录,因此它需要高性能和高效。关于如何在 PHP/MySQL 中以快速有效的方式执行此操作有什么想法吗?
我正在考虑levenshtein,但据我所知,这也会查看两个完全不同的单词在拼写方面的距离。除非我只是以错误的方式使用它,否则似乎不适合这种情况..
它可能只在 MySQL 中完成,可能使用全文搜索或其他方式。
这似乎是nice solution,虽然不是为这种情况设计的。也许可以以某种方式使用二进制比较?
【问题讨论】:
-
你忘了告诉我们 A/B/C/D/E 是否是同一个表中的字段,在不同的表中,都是一个大的 varchar/text/something。请更新一些表定义。
-
目前完全处于理论阶段,因此可以提出建议(这将取决于效率)。实际属性将是字符串,但也许可以使用它们的数字 id 进行比较。它们可以存储在单独的表中并作为连接处理,但这效率很低,所以我想知道它们是否也可以作为字符串缓存在同一个表中,它只是将字符串视为一个整体比较时。另一个想法是它可以为每个项目创建某种指纹并基于它进行搜索(如果这样会更快)
-
你想要的确切的o/p是什么?只有完美的结果?
-
不,只是部分或完全匹配的所有结果的列表,按匹配百分比排序
-
所有属性值都已知吗?所有实体都具有相同数量的属性吗?