【发布时间】:2018-10-23 15:53:59
【问题描述】:
我正在尝试加快使用 Contains Near 的查询和使用 regexp_like 的查询。初始的 Contains Near 查询运行大约需要 45 分钟。 Clob Column 包含大型“文档”并且是域索引的。
初始查询:
SELECT column1
FROM TEST
WHERE CONTAINS(column1,'{NEAR(quick,fox, lazy), 3, FALSE}')>0;
建议的查询:
SELECT column1
FROM TEST
WHERE REGEXP_LIKE(column1, '(\b(quick|fox|lazy)(?:\W+\w+){1,6}?\W(quick|fox|lazy)(?:\W+\w+){1,}?\W(quick|fox|lazy)\b)','i')
我从这里得到了原始的正则表达式语法: https://www.regular-expressions.info/near.html.
问题: 我让正则表达式代码在 html https://www.regextester.com 中工作,但是当我把它放在 Oracle 中时它什么也找不到。我的语法有什么问题?我想不通。 Oracle 是否以不同方式处理 REGEXP?
【问题讨论】:
-
Oracle doesn't support all regex flavours and extensions。我认为是
?:让你绊倒,但不确定。我有点惊讶正则表达式会更快...... -
要查找一个单词,您需要使用
REGEXP_LIKE(column1, '[[:blank:]](quick|fox|lazy)[[:blank:]]','i')。 -
@AlexPoole,我不确定它是否更快。我的任务是找到一种更快的方法,并打算检查一下。他们经常使用 CONTAINS 和 REGEXP_LIKE
-
@MarmiteBomber 我想要,理想情况下,
-
@MarmiteBomber 我想要,理想情况下:找到包含这 3 个单词的文档,每个单词之间最多有 1-6 个单词。它们可以按任何顺序排列。我可以使用 regexp 找到其中之一的文档,但似乎无法复制我可以在 Oracle 中使用 regexp 附近执行的操作,仅在 Oracle 之外。
标签: sql oracle oracle-text regexp-like