330 likes | 536 Views
Oracle Text. Алберт ШАХУГЯН CNsys PLC. Еволюция. Oracle 7.3 ConText Option Появява се за първи път Oracle 8.0 ConText Cartidge Изисква допълнителени лицензи Oracle 8.1.5 InterMedia Text Влиза в пакета InterMedia Вече се използват домейн индекси. Еволюция. Oracle 8.1.6 interMedia Text
E N D
Oracle Text Алберт ШАХУГЯНCNsys PLC
Еволюция • Oracle 7.3 ConText Option • Появява се за първи път • Oracle 8.0 ConText Cartidge • Изисква допълнителени лицензи • Oracle 8.1.5 InterMedia Text • Влиза в пакета InterMedia • Вече се използват домейн индекси
Еволюция • Oracle 8.1.6 interMedia Text • Не са необходими допълнителни лицензи • Oracle 8.1.7 interMedia Text • Добавен е нов тип индекс CTXCAT • Oracle 9.0.1Oracle Text • Добавен е нов тип индекс CTXRULE
Необходимост от домейн индекси • Информация която не е структурирана, намираща се във LONG и LOB полета • Атрибути на съхраняваната информация - collections of objects • Специфична информация която се изчислява по даден начин от данните във таблицата.
Съставни части на домейн индексите • Задължителни • ODCI Index Интерфейс • Оператори • Indextypes • Опционални • ODCI Statistics Interface
ODCI Index Интерфейс • Index Definition methods • ODCIIndexCreate • ODCIIndexAlter • ODCIIndexTruncate • ODCIIndexDrop • Index Maintenance methods • ODCIIndexInsert • ODCIIndexUpdate • ODCIIndexDelete
ODCI Index Интерфейс • Index Scan methods • ODCIIndexStart • ODCIIndexFetch • ODCIIndexClose • Index Metadata method • ODCIIndexGetMetadata
Оператори • Без контекст клауза се дефинира съответствие между параметрите и функциите • С помоща на WITH INDEX CONTEXT, SCAN CONTEXTсе дефинират два допълнителни параметъра на оператора които се ползват при работа с домейн индекси
Indextypes • Създаването на INDEXTYPE е последната задължителна стъпка при дефинирането на домейн индекс тип. • Указва се набора от оператори които ще работят с този тип индекс и методите за извличане на данни от вътрешните структури на индекса.
Дефиниране на методите CREATE TYPE DomainIndexMethods ( FUNCTION ODCIIndexCreate(...) RETURN NUMBER, ... ); CREATE TYPE BODY DomainIndexMethods ( ... );
Дефиниране на оператор CREATE FUNCTION TextContains (Text IN VARCHAR2, Key IN VARCHAR2, indexctx IN ODCIIndexCtx, scanctx IN OUT TextIndexMethods, scanflg IN NUMBER) RETURN NUMBER AS BEGIN ... END TextContains; CREATE OPERATOR Contains BINDING (VARCHAR2, VARCHAR2) RETURN NUMBER WITH INDEX CONTEXT, SCAN CONTEXT TextIndexMethods USING TextContains;
Дефиниране на Indextype CREATE INDEXTYPE TextIndexType FOR Contains (VARCHAR2, VARCHAR2) USING TextIndexMethods;
Създаване на домейн индекс CREATE INDEX i_test_ctx ON test_table(text) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('');
Стастистики за CBO • ODCIStats интерфейс • ODCIStatsCollect • ODCIStatsDelete • ODCIStatsSelectivity • ODCIStatsFunctionCost • ODCIStatsIndexCost • ASSOCIATE STATISTICS WITH ... USING…
Lexer • Разделя текстовия поток на думи(tokens) според езика • Анализира текста спрямо указаният тематичен речник и подава думите (tokens) за индексиране
Indexing Engine • Обработва информацията от лексера и секционирането и я записва в индексите • Използва списъка със stopwords за да премахне често срещаните и неинформативни думи • Използва wordlist за да определи: • Кой stemmer ще се използва за извличатне корените на думите • Параметри за fuzzy функцията • Параметри за prefix индексирането • Максимален брой думи при wildcard expansion
Oracle TextIndex • Набор от таблици в които се съхранява информацията извлечена при процеса на индексиране • Структурата на таблиците се различава за различните видове индекси
CONTEXT Индекси • Предимства • Богат набор от функции за търсене • Размерът на индекса е съизмерим с размерът на индексираният текст • Недостатъци • Не са транзакционни • Необходимо е да се оптимизират
Поддръжка на кирлица • Препоръчителна версия на Oracle Server • Oracle 8.1.7.3.0 • има известни проблеми с INSO_FILTER • Oracle 9.0.1.3.0 • Ограничения • Не работят някои функции • SOUNDEX, STEM
Създаване на индекс CREATE INDEX i_text_ctx ON news(text) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
Най-често използвани оператори за търсене
Примерни низове за търсене вестници | списания компют% | (персонал_% &компют%)*3 цветя & вази ~ сушени умни & (бързи, смели, сръчни) near ((бази, данни), 3, TRUE) (индексиране & текст) WITHINtitle (индексиране & текст) WITHINPARAGRAPH (индексиране & текст) WITHINSENTENCE
Търсене във индекса SELECT text, score(1) score FROM news WHERE contains(text, 'Толкин', 1) > 0 ORDER BY score DESC
CTXCAT Индекси • Предимства • Позволяват добавянето на структурирана клауза при търсене • Тразакционниса • Не се фрагментират • Недостатъци • Могат да надхвърлят 5-10 пъти размера на индексираните данни • По-бавно се създават • Опростен набор от операции за търсене
Работа с index set В ctx_ddl се намират следните процедури: create_index_set(set_name) add_index(set_name, column_list) remove_index(set_name, column_list) drop_index_set(set_name)
Създаване на индекса begin ctx_ddl.create_index_set('item_set'); ctx_ddl.add_index('item_set', 'price'); end; CREATE INDEX i_items_cat ON items(name) INDEXTYPE IS CTXSYS.CTXCAT PARAMETERS ('INDEX SET item_set');
Логически оператори за търсене в индекса
Търсене в индекса SELECT name, price FROM items WHERE catsearch(name, 'книги', 'price < 500 order by price') > 0
CTXRULE Индекси • Използват се за категоризиране на текстове • Работят само с колони от тип VARCHAR2 и CLOB • Използват таблица с предефинирани низове за търсене