Оракл для начинающих | Oracle for beginners

 

Полнотекстовый поиск при помощи Oracle Text

Oracle Text - это бесплатная компонента, входящая в состав Oracle Database, предназначенная для создания приложений с использованием полнотекстового поиска. В предыдущих версиях Oracle имела также названия ConText и interMedia Text. Начиная с 11ой версии входит во все редакции СУБД.

Полнотекстовый поиск - это поиск документов в базе данных текстов с использованием полнотекстового индекса. Полнотекстовый индекс - это индекс, в котором перечислены все слова, встречающиеся в тексте, и указаны позиции, на которых эти слова встречаются. Полнотекстовый индекс позволяет производить поиск очень быстро, в отличие например от поиска при помощи оператора like. Кроме того, системы полнотекстового поиска обычно включают в себя функционал, расширяющий возможности поиска, например поиск с учетом морфологии языка, синонимов, созвучных слов, с учетом меры близости между словами в запросе и другие.

Oracle Text позволяет строить полнотекстовые индексы 4-ёх типов:

  • CONTEXT - основной тип индекса. Применяется для индексирования содержимого одной или нескольких колонок таблицы;
  • CTXCAT - применяется для индексации небольших текстовых фрагментов, не требует периодической переиндексации;
  • CTXRULE - применяется при создании приложений для классификации документов;
  • CTXXPATH - предназначен для ускорения работы с полями типа XMLType.

Рассмотрим пример создания контекстного полнотекстового индекса по таблице документов docs.

Создадим таблицу документов и наполним ее данными:

create table docs (id number not null, text varchar2(1000) not null);

insert into docs values (1, 'Шла Саша по шоссе и сосала сушку.');

insert into docs values (2, 'London is the capital of The United Kingdom of Great Britain and Northern Ireland.');

Создадим настройки для полнотекстового индекса и выполним его построение:

begin

create index docs_idx on docs (text) indextype is ctxsys. context parameters ('LEXER my_lexer WORDLIST my_wordlist');

1 Шла Саша по шоссе и сосала сушку.

select * from docs where contains(text, '$идти') > 0;

 



  • На главную