Базы данных Oracle - статьи

         

Подготовка и проведение опыта с запросами


Построим таблицу с набором запросов, которую потом будем использовать в качестве таблицы «правил», или же «таблицы классификации» документов. Выдадим в 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 пропадет).



Содержание раздела