【问题标题】:regexp_like that mirrors contains nearregexp_like 镜像包含 near
【发布时间】: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


【解决方案1】:

亚历克斯,你完全正确。我不知道如何选择正确的答案。

我的问题显然是我使用了 Oracle 无法识别的正则表达式参数。因此,虽然它在https://www.regextester.com 上工作,但它在 Oracle 中却失败了,因为我使用的大部分内容在 Oracle 中都不能用于正则表达式。我真的认为甲骨文应该扩展它认可的正则表达式代码。这真是令人沮丧。

【讨论】:

    猜你喜欢
    • 2021-10-27
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多