Построим таблицу с набором запросов, которую потом будем использовать в качестве таблицы «правил», или же «таблицы классификации» документов. Выдадим в SQL*Plus:
CREATE TABLE rules ( id NUMBER PRIMARY KEY, query VARCHAR2 ( 1000 ) );
INSERT INTO rules VALUES ( 1, 'lamb' ); INSERT INTO rules VALUES ( 2, 'little OR lamb' ); INSERT INTO rules VALUES ( 3, 'lamb NOT mary' ); INSERT INTO rules VALUES ( 4, 'little lamb' ); INSERT INTO rules VALUES ( 5, 'lamb little' ); INSERT INTO rules VALUES ( 6, 'lamb NEAR mary' );
Строим индекс и готовим сценарный файл для опытов:
CREATE INDEX rules_idx ON rules ( query ) INDEXTYPE IS CTXSYS.CTXRULE;
COLUMN category FORMAT 99999 COLUMN query FORMAT A50 SELECT id category, query FROM rules WHERE MATCHES ( query, '&1' ) > 0 . SAVE matches REPLACE SET VERIFY OFF
Проверяем соответствие трех «документов» шести заведенным «классификационным признакам»:
CTX> @matches 'Mary had a little lamb'
CATEGORY QUERY -------- -------------------------------------------------- 1 lamb
6 lamb NEAR mary
2 little OR lamb
4 little lamb
CTX> @matches 'Twinkle, twinkle little star'
CATEGORY QUERY -------- -------------------------------------------------- 2 little OR lamb
CTX> @matches 'This Lamb is my lamb'
CATEGORY QUERY -------- -------------------------------------------------- 1 lamb
2 little OR lamb
3 lamb NOT mary
Дальнейшие опыты рекомендуется провести самостоятельно. При необходимости следует воспользоваться известной из предыдущего материала процедурой CTX_DDL.SYNC_INDEX перестройки индекса. Также рекомендуется удостовериться, что в плане обработки наших запросов стоит обращение к индексу RULES_IDX (имеющийся там шаг обращения к таблице RULES вызван нашим желанием выдать значение поля ID строки из этой таблицы; если этого не сделать, обращение к таблице RULES пропадет).