Sql Postgres将内容与基本事实表进行比较
给出了下表(每个表包含约200万个数据集): 电影:Sql Postgres将内容与基本事实表进行比较,sql,string,postgresql,compare,levenshtein-distance,Sql,String,Postgresql,Compare,Levenshtein Distance,给出了下表(每个表包含约200万个数据集): 电影: | title | genre | price | |***************************|***********|*******| | Bria nsau r us | History | 10.2 | | BoJch o BillyOut6 tt e d | Animation | 10.2 | |M on l igh t on th6 R
| title | genre | price |
|***************************|***********|*******|
| Bria nsau r us | History | 10.2 |
| BoJch o BillyOut6 tt e d | Animation | 10.2 |
|M on l igh t on th6 R ange| Fantasy | 10.2 |
| Pret a Teleport er | Animation | 10.2 |
| ... | ... | ... |
《大地真相》电影:
| title | genre |
|***************************|***********|
| Briansaurus | History |
| Broncho Billy Outwitted | Animation |
| Moonlight on the Range | Fantasy |
| Pret a Teleporter | Animation |
| ... | ... |
我的任务是根据ground\u truth\u movie表中的标题清理movie表中的标题
由于电影表中的标题写得完全错误,因此我在本例中发现的最佳比较函数是levenshtein。到目前为止,我拥有以下SQL脚本:
SELECT m.title, (
SELECT g.title
FROM ground_truth_movie g
ORDER BY levenshtein(g.title, m.title) ASC, g.title
LIMIT 1
)
FROM movie m
由于这个脚本在缩减的数据集上花费了非常长的时间,所以我考虑以某种方式加快它的速度
是否还有其他概念将专栏与基本事实相比较
我是这个领域的新手,我认为我的第一次尝试并不是最好的;)
感谢您的帮助通过“200万数据集”,您的意思是每个表中有200万行吗?如果不是,您能说出数据集的大致大小吗?您是否可以选择在DB之外处理数据集,然后单独更新它?能够将所有内容加载到内存中,可以使匹配逻辑更灵活,性能更高。假设你至少可以指望第一个角色是准确的,你可以从该角色开始对电影的子选择进行排序(显然,有一个索引会有帮助)。你能给出一些有代表性的数据示例吗?你尝试了一个合适的连接吗<代码>从电影m中选择m.title,g.title加入地面\u真相\u levenshtein上的电影g(g.title,m.title)<2(用您需要的阈值替换
<2
)@wumpz:刚刚为问题添加了一些演示数据above@barry:是,每个表中有200万行。导出数据不是一个好主意,因为这对我的记忆来说太大了。无论如何谢谢你
SELECT m.title, (
SELECT g.title
FROM ground_truth_movie g
ORDER BY levenshtein(g.title, m.title) ASC, g.title
LIMIT 1
)
FROM movie m