regexp_like, что зеркала содержат рядом

Я пытаюсь ускорить запрос, использующий «Содержит рядом», с запросом, использующим 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 Jennifer Crosby    schedule 23.10.2018    source источник
comment
Oracle поддерживает не все разновидности и расширения регулярных выражений. Я думаю, что это ?: сбивает тебя с толку, но не уверен. Я немного удивлен, что регулярное выражение будет быстрее...   -  person Alex Poole    schedule 23.10.2018
comment
Чтобы найти одно слово, вам нужно использовать REGEXP_LIKE(column1, '[[:blank:]](quick|fox|lazy)[[:blank:]]','i').   -  person Marmite Bomber    schedule 23.10.2018
comment
@AlexPoole, я не уверен, что это быстрее. Мне просто поручили найти более быстрый способ, и я собирался проверить это. Они часто используют как CONTAINS, так и REGEXP_LIKE.   -  person Jennifer Crosby    schedule 24.10.2018
comment
@MarmiteBomber В идеале я хочу   -  person Jennifer Crosby    schedule 25.10.2018
comment
@MarmiteBomber В идеале я хочу: найти документ, в котором есть эти 3 слова, и каждое слово имеет максимум 1-6 слов между каждым из них. Они могут быть в любом порядке. Я могу найти документы с одним из них, используя регулярное выражение, но, похоже, не могу дублировать то, что я могу сделать с рядом с использованием регулярного выражения в Oracle, только за пределами Oracle.   -  person Jennifer Crosby    schedule 25.10.2018
comment
Может ли кто-нибудь придумать лучший способ ускорить код CONTAINS/NEAR в ORACLE? Я в растерянности.   -  person Jennifer Crosby    schedule 25.10.2018
comment
Я хотел использовать [[:blank:]] и НЕ \b, которые не совпадают.   -  person Marmite Bomber    schedule 25.10.2018
comment
Не могли бы вы описать вашу настройку немного подробнее. У вас есть александрийская библиотека, сканирование которой занимает 45 минут? :)   -  person Marmite Bomber    schedule 25.10.2018


Ответы (1)


Алекс, ты был совершенно прав. Я не понимаю, как выбрать ваш ответ как правильный.

Моя проблема, по-видимому, заключалась в том, что я использовал параметры регулярного выражения, которые Oracle не распознает. Таким образом, в то время как он работал на https://www.regextester.com, он не работал в Oracle, потому что большинство то, что я использовал, не признано пригодным для использования с регулярным выражением в Oracle. Я действительно думаю, что Oracle должен расширить свои коды регулярных выражений, которые он распознал. Это очень расстраивало.

person Jennifer Crosby    schedule 26.11.2018