Я пытаюсь ускорить запрос, использующий «Содержит рядом», с запросом, использующим regexp_like. Первоначальный запрос «Содержит рядом» занимает около 45 минут. Столбец Clob содержит большие «документы» и индексируется доменом.
Исходный запрос:
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 по-другому?
?:
сбивает тебя с толку, но не уверен. Я немного удивлен, что регулярное выражение будет быстрее... - person Alex Poole   schedule 23.10.2018REGEXP_LIKE(column1, '[[:blank:]](quick|fox|lazy)[[:blank:]]','i')
. - person Marmite Bomber   schedule 23.10.2018[[:blank:]]
и НЕ\b
, которые не совпадают. - person Marmite Bomber   schedule 25.10.2018