Oracle Text. Как организовать контекстный, регистронезависимый поиск в ORACLE DB?
На помощь придет Oracle Text. Это штатный компонент для организации поиска по текстовым документам. Ссылка на официальную документацию в источниках.
Почему для контекстного регистронезависимого поиска плохо подходит оператор LIKE '%подстрока%' в паре с оператором UPPER/LOWER? Возникает проблема подхватывания индекса по фильтруемому полю. Получаем фулскам таблицы.
Чтобы начать использовать возможности Oracle Text по полю по которому будет отбор записей надо построить контекстный индекс. Рассмотрим примитивный пример
-- создаем таблицу CREATE TABLE tz_docs ( doc_id NUMBER ( 010 ), text_doc VARCHAR2 ( 04000 CHAR) ); -- наполняем тестовыми данными INSERT INTO tz_docs VALUES ( 01,#ff0000;">'В 2021 году была организована компания "РОГА И КОПЫТА"' ); -- создаем контекстный индекс CREATE INDEX idx_docs_01 ON tz_docs (text_doc) INDEXTYPE IS ctxsys.context; -- делаем запрос
После добавления/изменения записей в таблице контекстный индекс ctxsys.context надо перестраивать. Эту операцию можно повесить на джоб
Источники
https://docs.oracle.com/database/121/CCREF/cqoper.htm