首页 新闻 会员 周边 捐助

大数据量情况下,如何在两张表之间 找出一张表与另一张表中NAME字段相似度最高的数据?

-2
悬赏园豆:100 [待解决问题]

我有两张表:A,B 结构都是 ID NAME
我想找出A表的NAME跟B表的哪个NAME相似度最高 展示出来
比如查询结果如下:
A.NAME B.NAME SIMILARITY
A A 100
B B1 50

我的思路是将两张表CROSS 后调用相似度对比函数 完了取出相似度最高的

但是当两张表都是10W条数据的时候 交叉后将会是100亿条数据,根本短时间内无法完成计算,

各位大神有没有什么好办法?

王波洋的主页 王波洋 | 初学一级 | 园豆:120
提问于:2016-06-16 16:19
< >
分享
所有回答(10)
-1

找国家申请专项科研基金,再找100个数学家,闭门研究个几十年总能有办法吧,到时候说不定量子计算机就有了。

爱编程的大叔 | 园豆:30844 (高人七级) | 2016-06-16 16:26
-1

可以发展10W个好心人,每人分配一个AName和一个BName。每个人都通过P2P网络寻找与当前ANAME最相似的BNAME。如果好心人爬遍了P2P网络,就将结果返回给中心服务器。(滑稽

长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-06-16 16:52
-1

为什么要一次性取出来了?用逻辑去控制 分批次取值。ID 主键 Name 全文索引。用 CONTAINS 匹配就行了。

紫炁星 | 园豆:57 (初学一级) | 2016-06-16 17:01
-1

已找到10万人

王波洋 | 园豆:120 (初学一级) | 2016-06-16 17:04
-1

个人愚见,遇到数据较多相似比对的情况,最好是再建第三张表。比对的时机一般可以放在,新增、修改数据的时候进行。一次性比对这么多数据确实不太靠谱。纯粹的对比总不能依赖你的语句查询。这个可以选择适合的容器。分批次取得数据,利用像LIST,字典,等等进行匹配对比,存入第三张表。目前我能想到的只有这些。另外你的这个思路"将两张表CROSS 后"。- -就这个所消耗掉的时间估计就很长了。还是分批处理吧!

大楚打码人 | 园豆:4313 (老鸟四级) | 2016-06-16 17:13
-1

这个不是那么简单的

CodeHsu | 园豆:5668 (大侠五级) | 2016-06-16 17:36
-1

你相似度是怎么定义的?

Daniel Cai | 园豆:10424 (专家六级) | 2016-06-16 17:37
-1

我觉得,先把NAME和ID拿到内存里,20W数据也不多。然后你自己定义一个规则把NAME上某种值的数据分类,比如张开头的分一类,长度大于10的分一类之类的,根据你自己的需要。也就两遍内存里循环。等数据分小了,你再在两个表分的同一类里去用相似度算法找。(其实同一类本身就是一种相似度匹配规则,关键是个模糊度的问题,几次比较模糊的分类就可以把数据变得很少,精确度也不影响)

咸鱼.net | 园豆:216 (菜鸟二级) | 2016-06-16 17:55
-1

放到同一个表里面。order by,

forhells | 园豆:724 (小虾三级) | 2016-06-16 23:04
-1

楼主,你这种需求可以看下lucene.net,配合盘古分词,应该能达到你的效果,但是,前提是录入数据库的时候,你先做好分词之后再插入,然后通过数据库索引去查询,10W真不是什么大数据...

Teacher、Tan | 园豆:63 (初学一级) | 2016-06-17 13:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册