Oracle Text. Как организовать контекстный, регистронезависимый поиск в ORACLE DB?

На помощь придет Oracle Text.  Это штатный компонент для организации поиска по текстовым документам. Ссылка на официальную документацию в источниках.

Почему для контекстного регистронезависимого поиска плохо подходит оператор LIKE '%подстрока%' в паре с оператором UPPER/LOWER?  Возникает проблема подхватывания индекса по фильтруемому полю. Получаем фулскам таблицы.

Чтобы начать использовать возможности Oracle Text по полю по которому будет отбор записей надо построить контекстный индекс. Рассмотрим  примитивный пример

-- создаем таблицу
CREATE TABLE tz_docs ( doc_id NUMBER ( 10 ), text_doc VARCHAR2 ( 4000 CHAR) );
-- наполняем тестовыми данными
INSERT INTO tz_docs VALUES ( 1, 'В 2021 году была организована компания "РОГА И КОПЫТА"' );
INSERT INTO tz_docs VALUES ( 2, 'Рог и копыто изображено на гербе нашего города' );
INSERT INTO tz_docs VALUES ( 3, 'Совершенно отвлеченный текст 01' );
INSERT INTO tz_docs VALUES ( 4, 'Совершенно отвлеченный текст 02' );
-- создаем контекстный индекс
CREATE INDEX idx_docs_01 ON tz_docs (text_doc) INDEXTYPE IS ctxsys.context;
-- делаем запрос
SELECT * FROM tz_docs WHERE CONTAINS ( text_doc, 'рог%&и%&копыт%');

После добавления/изменения записей в таблице контекстный индекс ctxsys.context надо перестраивать. Эту операцию можно повесить на джоб

20:33
28
Нет комментариев. Ваш будет первым!
Загрузка...