在多个正则表达式中匹配字符串
问题描述:
我有一个postgresql数据库,其中包含大约5000万个地址字符串条目。字符串的例子是在多个正则表达式中匹配字符串
NIAID, Opportunist Infect Res Branch, Treatment Res Programs, Div Aids, Bethesda, MD USA
PRINCETON UNIV,DEPT PSYCHOL,PRINCETON,NJ 08544
等
现在我要检查,如果地址匹配任何的约30000正则表达式列表。我也需要知道哪个正则表达式匹配。正则表达式的示例是
%umass mem med ctr worcester%worcester%ma%
%darnnouth%
这当然是'LIKE'格式的postgres。由于正则表达式匹配无法利用索引(不管怎样,我已经对varchar_pattern_ops字段进行了索引),所以此操作的总运行时间将约为3亿5千万。
我还可以使用python来执行正则表达式匹配,如果存在任何python库,这将帮助我加快进程。
感谢您的帮助!
答
出了什么问题:
CREATE TABLE regex (
regex text primary key
);
SELECT * FROM my_table
JOIN regex ON mytextfield like regex;
+0
这似乎是最快的选择,因为它使用'JOIN'来执行正则表达式匹配。可能还没有办法进一步加快这一进程。谢谢。 – amhrpi 2014-07-16 00:37:49
30000正则表达式:这是相当多的,你可能想先编译他们,如果这将是重复几个查询。 – 2013-04-09 14:38:43
“编译”是什么意思?查询postgresql数据库不需要编译afaik。它不会被重复。这是一次性操作。 – amhrpi 2013-04-09 15:34:08
不确定你对postgres能否像这样的查询使用索引是正确的。如果你在表达式的开头有'%',那么它仍然会导致seq扫描。确保你检查'EXPLAIN' – 2013-04-09 15:55:07