33
Oracle Text Алберт ШАХУГЯН CNsys PLC

Oracle Text

  • Upload
    salome

  • View
    60

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Oracle Text

Oracle Text

Алберт ШАХУГЯНCNsys PLC

Page 2: Oracle Text

ЕволюцияЕволюция

Oracle 7.3 ConText Option Появява се за първи път

Oracle 8.0 ConText Cartidge Изисква допълнителени лицензи

Oracle 8.1.5 InterMedia Text Влиза в пакета InterMedia Вече се използват домейн индекси

Page 3: Oracle Text

ЕволюцияЕволюция

Oracle 8.1.6 interMedia Text Не са необходими допълнителни лицензи

Oracle 8.1.7 interMedia Text Добавен е нов тип индекс CTXCAT

Oracle 9.0.1 Oracle Text Добавен е нов тип индекс CTXRULE

Page 4: Oracle Text

Необходимост от домейн индексиНеобходимост от домейн индекси

Информация която не е структурирана, намираща се във LONG и LOB полета

Атрибути на съхраняваната информация - collections of objects

Специфична информация която се изчислява по даден начин от данните във таблицата.

Page 5: Oracle Text

Съставни части на домейн индекситеСъставни части на домейн индексите

Задължителни ODCI Index Интерфейс Оператори Indextypes

Опционални ODCI Statistics Interface

Page 6: Oracle Text

ODCI IndexODCI Index Интерфейс Интерфейс

Index Definition methods ODCIIndexCreate ODCIIndexAlter ODCIIndexTruncate ODCIIndexDrop

Index Maintenance methods ODCIIndexInsert ODCIIndexUpdate ODCIIndexDelete

Page 7: Oracle Text

ODCI IndexODCI Index Интерфейс Интерфейс

Index Scan methods ODCIIndexStart ODCIIndexFetch ODCIIndexClose

Index Metadata method ODCIIndexGetMetadata

Page 8: Oracle Text

ОператориОператори

Без контекст клауза се дефинира съответствие между параметрите и функциите

С помоща на WITH INDEX CONTEXT, SCAN CONTEXT се дефинират два допълнителни параметъра на оператора които се ползват при работа с домейн индекси

Page 9: Oracle Text

IndextypesIndextypes

Създаването на INDEXTYPE е последната задължителна стъпка при дефинирането на домейн индекс тип.

Указва се набора от оператори които ще работят с този тип индекс и методите за извличане на данни от вътрешните структури на индекса.

Page 10: Oracle Text

Дефиниране на методитеДефиниране на методите

CREATE TYPE DomainIndexMethods

(

FUNCTION ODCIIndexCreate(...) RETURN NUMBER,

...

);

CREATE TYPE BODY DomainIndexMethods

(

...

);

Page 11: Oracle Text

Дефиниране на операторДефиниране на оператор

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;

Page 12: Oracle Text

Дефиниране на Дефиниране на IndextypeIndextype

CREATE INDEXTYPE TextIndexType

FOR Contains (VARCHAR2, VARCHAR2)

USING TextIndexMethods;

Page 13: Oracle Text

Създаване на домейн индексСъздаване на домейн индекс

CREATE INDEX i_test_ctx

ON test_table(text)

INDEXTYPE IS CTXSYS.CONTEXT

PARAMETERS ('');

Page 14: Oracle Text

Стастистики за Стастистики за CBOCBO

ODCIStats интерфейс ODCIStatsCollect ODCIStatsDelete ODCIStatsSelectivity ODCIStatsFunctionCost ODCIStatsIndexCost

ASSOCIATE STATISTICS WITH ... USING…

Page 15: Oracle Text

Oracle Text Oracle Text АрхитектураАрхитектура

Page 16: Oracle Text

DatastoreDatastore

DIRECT_DATASTORE Служи за индексиране на колони от тип VARCHAR2, CHAR, CLOB, BLOB, BFILE или XMLType

MULTI_COLUMN_DATASTORE Няколко колони се обединяват и се индексират като една обща

DETAIL_DATASTORE Дава възможност за индексиране на master-detail таблици

FILE_DATASTORE Текста се извлича от файлове на операционната система

NESTED_DATASTORE Дава възможност за индексиране на nested таблици

URL_DATASTORE Текста се изтегля от указаното URL

USER_DATASTORE Текста за индексиране се синтезира от потребителска процедура

Page 17: Oracle Text

FilterFilter

NULL_FILTER Не се извършват преобразувания на текста

INSO_FILTER Извлича се текста и начина на форматиране на документите

CHARSET_FILTER Преобразува се кодовата таблица на текста към тази на базата

Page 18: Oracle Text

SectionerSectioner

NULL_SECTION_GROUP Разпознава само изречения и праграфи

BASIC_SECTION_GROUP Разпознава групи от вида

<TAG> … </TAG>

HTML_SECTION_GROUP Разпознава HTML

XML_SECTION_GROUP Разпознава XML

AUTO_SECTION_GROUP Подобна е на xml_section_group секционната група. Автоматично разпознава атрибути и т.н.

PATH_SECTION_GROUP Подобна на auto_section_group.

Позволява използването на INPATH и HASPATH във низа за търсене. Нова функционалност в Oracle Text

NEWS_SECTION_GROUP Разпознава newsgrops (RFC 1036)

Page 19: Oracle Text

LexerLexer

Разделя текстовия поток на думи (tokens) според езика

Анализира текста спрямо указаният тематичен речник и подава думите (tokens) за индексиране

Page 20: Oracle Text

Indexing EngineIndexing Engine

Обработва информацията от лексера и секционирането и я записва в индексите

Използва списъка със stopwords за да премахне често срещаните и неинформативни думи

Използва wordlist за да определи: Кой stemmer ще се използва за извличатне корените на

думите Параметри за fuzzy функцията Параметри за prefix индексирането Максимален брой думи при wildcard expansion

Page 21: Oracle Text

Oracle TextIndexOracle TextIndex

Набор от таблици в които се съхранява информацията извлечена при процеса на индексиране

Структурата на таблиците се различава за различните видове индекси

Page 22: Oracle Text

CONTEXT CONTEXT ИндексиИндекси

Предимства Богат набор от функции за търсене Размерът на индекса е съизмерим с

размерът на индексираният текст

Недостатъци Не са транзакционни Необходимо е да се оптимизират

Page 23: Oracle Text

Поддръжка на кирлицаПоддръжка на кирлица

Препоръчителна версия на Oracle Server Oracle 8.1.7.3.0

има известни проблеми с INSO_FILTER Oracle 9.0.1.3.0

Ограничения Не работят някои функции

SOUNDEX, STEM

Page 24: Oracle Text

Създаване на индексСъздаване на индекс

CREATE INDEX i_text_ctx ON news(text)

INDEXTYPE IS CTXSYS.CONTEXT

PARAMETERS ('FILTER CTXSYS.NULL_FILTER

SECTION GROUP CTXSYS.HTML_SECTION_GROUP');

Page 25: Oracle Text

Най-често използвани оператори за търсенеНай-често използвани оператори за търсене

AND & Логическо И, връща по-малките точки

OR | Логическо ИЛИ, връща по-големите точки

NOT ~ Логическо НЕ

ACCUMULATE , Подобен е на ИЛИ, акумулира точките на отделните думи

%, _ Действат като в LIKE

NEAR ;(остаряло)

Оценява коло близко една до друга са дадени думи

WITHIN Позволява търсене във рамките на дадена секция

( ) Порменя последователността на операциите

* Задава тегловен коефицент

Page 26: Oracle Text

Примерни низове за търсенеПримерни низове за търсене

вестници | списания

компют% | (персонал_% & компют%)*3

цветя & вази ~ сушени

умни & (бързи, смели, сръчни)

near ((бази, данни), 3, TRUE)

(индексиране & текст) WITHIN title

(индексиране & текст) WITHIN PARAGRAPH

(индексиране & текст) WITHIN SENTENCE

Page 27: Oracle Text

Търсене във индексаТърсене във индекса

SELECT text, score(1) score FROM news

WHERE contains(text, 'Толкин', 1) > 0

ORDER BY score DESC

Page 28: Oracle Text

CTXCAT CTXCAT ИндексиИндекси

Предимства Позволяват добавянето на структурирана

клауза при търсене Тразакционни са Не се фрагментират

Недостатъци Могат да надхвърлят 5-10 пъти размера на

индексираните данни По-бавно се създават Опростен набор от операции за търсене

Page 29: Oracle Text

Работа с Работа с index setindex 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)

Page 30: Oracle Text

Създаване на индексаСъздаване на индекса

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');

Page 31: Oracle Text

Логически оператори за търсене в индексаЛогически оператори за търсене в индекса

AND <space> a b c

OR | a | b | c

NOT <space>- a b -c

PHRASE " " "a b" c

() (a b) | c

Page 32: Oracle Text

Търсене в индексаТърсене в индекса

SELECT name, price FROM items WHERE catsearch(name, 'книги',

'price < 500 order by price') > 0

Page 33: Oracle Text

CTXRULE CTXRULE ИндексиИндекси

Използват се за категоризиране на текстове

Работят само с колони от тип VARCHAR2 и CLOB

Използват таблица с предефинирани низове за търсене