Как-то столкнулся я с новой для меня задачей, реализовтаь контектный поиск внутри Oracle.
На русском языке Google сходу выдаёт одну статью, которая конечно помогла мне, но в ней не было по шагам написано что надо сделать, чтобы всё заработало. поэтому здесь я будет краткая справка о том что делать и куда бежать. По сути - это будет пересказ оракловой статьи - Getting Started with Oracle Text.
SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0;
SCORE(1) ID TEXT
---------- ---------- ----------------------------------------
4 3 <HTML>France is in Europe.</HTML>
4 2 <HTML>Paris is a city in France.</HTML>
Хочу заметить, что данный пример покрывает только наипростейший контекстный индекс и контекстный поиск. В следующем посте я напишу как создавать контекстный индекс, основанный на функции. Это гораздо полезней.
На русском языке Google сходу выдаёт одну статью, которая конечно помогла мне, но в ней не было по шагам написано что надо сделать, чтобы всё заработало. поэтому здесь я будет краткая справка о том что делать и куда бежать. По сути - это будет пересказ оракловой статьи - Getting Started with Oracle Text.
- Добавляем пользователю, который будет работать с пакетом ctx_ddl роль ctxapp.GRANT ctxapp TO myuser;
- Дать нашему пользователю гранты на выполнение функций, которые находятся в пакетах, которые относятся к Oracle Text. Следующий код даст гранты на все пакеты OT.GRANT EXECUTE ON CTXSYS.CTX_CLS TO myuser;
GRANT EXECUTE ON CTXSYS.CTX_DDL TO myuser;
GRANT EXECUTE ON CTXSYS.CTX_DOC TO myuser;
GRANT EXECUTE ON CTXSYS.CTX_OUTPUT TO myuser;
GRANT EXECUTE ON CTXSYS.CTX_QUERY TO myuser;
GRANT EXECUTE ON CTXSYS.CTX_REPORT TO myuser;
GRANT EXECUTE ON CTXSYS.CTX_THES TO myuser;
GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO myuser;
- Создаём таблицу:REATE TABLE docs (id NUMBER PRIMARY KEY, text VARCHAR2(200));
- Вставляем в таблицу данные:INSERT INTO docs VALUES(1, '<HTML>California is a state in the US.</HTML>');
INSERT INTO docs VALUES(2, '<HTML>Paris is a city in France.</HTML>');
INSERT INTO docs VALUES(3, '<HTML>France is in Europe.</HTML>'); - Строим индекс:CREATE INDEX idx_docs ON docs(text)
INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS
('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0;
SCORE(1) ID TEXT
---------- ---------- ----------------------------------------
4 3 <HTML>France is in Europe.</HTML>
4 2 <HTML>Paris is a city in France.</HTML>
Хочу заметить, что данный пример покрывает только наипростейший контекстный индекс и контекстный поиск. В следующем посте я напишу как создавать контекстный индекс, основанный на функции. Это гораздо полезней.
Комментариев нет:
Отправить комментарий