我有一个 pl/pgsql 脚本,它需要检查一个单词/句子是否在一个字符串中,它必须注意单词边界,并且不区分大小写。
例子:
- 字符串:“我的标签 xx zz yy”,模式:“我的标签”,MATCH
- 字符串:“xx 我的标签 zz”,模式:“我的标签”,MATCH
- 字符串:“我的标签xx zz”,模式:“我的标签”,不匹配
所以显而易见的解决方案是使用正则表达式,如下所示:
select _label ~* (E'\\y' || _pattern || E'\\y') into _match;
与简单的相比,它可以工作但速度很慢
select _label ilike '%' || _pattern || '%' into _match;
这包含在一个函数中,我的脚本调用了 A LOT(数千万,我做了很多递归),并且由于这个要求,整体运行时间翻了一番。
现在我的问题是,有没有更快的方法来实现这个?
谢谢。
编辑:最终使用了这个:
if _label ilike '%' || _pattern || '%' then
select _label ~* (E'\\m' || _pattern || E'\\M') into _match;
end if;
而且速度明显更快。