Русский язык - флексивный, четкий поиск затруднен. Oracle дает решение, Oracle APEX помогает реализовать его за 15 минут. Предположим, у нас в базе данных есть коллекция статей. В статьях - слова. Мы хотим найти статьи, в которых использовано интересующее нас слово. Вариант типа select...
where lower('%'||text||'%') like lower(:key) - неэффективен, поскольку вероятность угадать в ключе конкретно использованную в тексте русскую словоформу весьма низка. Поступим иначе. Сначала создадим список всех слов и идентификаторов статей, в которых они использованы. До этого отфильтруем вон все, кроме букв, цифр и пробелов и переведем это все в нижний регистр, дефисы заменим на пробелы, а многократные пробелы заменим на единичные: select id
, regexp_replace(
regexp_replace(
lower(replace(text, '-', ' '))
, '[^a-zа-я0-9 ]', '')
, '( ){2,}', ' ') as words
from...
; Получим множество строк, состоящих из ID записи и ее "вычищенного" текста, который, по сути, является разделенным пробелами списком инте