oracle text
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 PresentationTRANSCRIPT
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.1 Oracle Text Добавен е нов тип индекс CTXRULE
Необходимост от домейн индексиНеобходимост от домейн индекси
Информация която не е структурирана, намираща се във LONG и LOB полета
Атрибути на съхраняваната информация - collections of objects
Специфична информация която се изчислява по даден начин от данните във таблицата.
Съставни части на домейн индекситеСъставни части на домейн индексите
Задължителни ODCI Index Интерфейс Оператори Indextypes
Опционални ODCI Statistics Interface
ODCI IndexODCI Index Интерфейс Интерфейс
Index Definition methods ODCIIndexCreate ODCIIndexAlter ODCIIndexTruncate ODCIIndexDrop
Index Maintenance methods ODCIIndexInsert ODCIIndexUpdate ODCIIndexDelete
ODCI IndexODCI Index Интерфейс Интерфейс
Index Scan methods ODCIIndexStart ODCIIndexFetch ODCIIndexClose
Index Metadata method ODCIIndexGetMetadata
ОператориОператори
Без контекст клауза се дефинира съответствие между параметрите и функциите
С помоща на WITH INDEX CONTEXT, SCAN CONTEXT се дефинират два допълнителни параметъра на оператора които се ползват при работа с домейн индекси
IndextypesIndextypes
Създаването на 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;
Дефиниране на Дефиниране на IndextypeIndextype
CREATE INDEXTYPE TextIndexType
FOR Contains (VARCHAR2, VARCHAR2)
USING TextIndexMethods;
Създаване на домейн индексСъздаване на домейн индекс
CREATE INDEX i_test_ctx
ON test_table(text)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('');
Стастистики за Стастистики за CBOCBO
ODCIStats интерфейс ODCIStatsCollect ODCIStatsDelete ODCIStatsSelectivity ODCIStatsFunctionCost ODCIStatsIndexCost
ASSOCIATE STATISTICS WITH ... USING…
Oracle Text 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 Текста за индексиране се синтезира от потребителска процедура
FilterFilter
NULL_FILTER Не се извършват преобразувания на текста
INSO_FILTER Извлича се текста и начина на форматиране на документите
CHARSET_FILTER Преобразува се кодовата таблица на текста към тази на базата
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)
LexerLexer
Разделя текстовия поток на думи (tokens) според езика
Анализира текста спрямо указаният тематичен речник и подава думите (tokens) за индексиране
Indexing EngineIndexing Engine
Обработва информацията от лексера и секционирането и я записва в индексите
Използва списъка със stopwords за да премахне често срещаните и неинформативни думи
Използва wordlist за да определи: Кой stemmer ще се използва за извличатне корените на
думите Параметри за fuzzy функцията Параметри за prefix индексирането Максимален брой думи при wildcard expansion
Oracle TextIndexOracle TextIndex
Набор от таблици в които се съхранява информацията извлечена при процеса на индексиране
Структурата на таблиците се различава за различните видове индекси
CONTEXT 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');
Най-често използвани оператори за търсенеНай-често използвани оператори за търсене
AND & Логическо И, връща по-малките точки
OR | Логическо ИЛИ, връща по-големите точки
NOT ~ Логическо НЕ
ACCUMULATE , Подобен е на ИЛИ, акумулира точките на отделните думи
%, _ Действат като в LIKE
NEAR ;(остаряло)
Оценява коло близко една до друга са дадени думи
WITHIN Позволява търсене във рамките на дадена секция
( ) Порменя последователността на операциите
* Задава тегловен коефицент
Примерни низове за търсенеПримерни низове за търсене
вестници | списания
компют% | (персонал_% & компют%)*3
цветя & вази ~ сушени
умни & (бързи, смели, сръчни)
near ((бази, данни), 3, TRUE)
(индексиране & текст) WITHIN title
(индексиране & текст) WITHIN PARAGRAPH
(индексиране & текст) WITHIN SENTENCE
Търсене във индексаТърсене във индекса
SELECT text, score(1) score FROM news
WHERE contains(text, 'Толкин', 1) > 0
ORDER BY score DESC
CTXCAT CTXCAT ИндексиИндекси
Предимства Позволяват добавянето на структурирана
клауза при търсене Тразакционни са Не се фрагментират
Недостатъци Могат да надхвърлят 5-10 пъти размера на
индексираните данни По-бавно се създават Опростен набор от операции за търсене
Работа с Работа с 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)
Създаване на индексаСъздаване на индекса
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');
Логически оператори за търсене в индексаЛогически оператори за търсене в индекса
AND <space> a b c
OR | a | b | c
NOT <space>- a b -c
PHRASE " " "a b" c
() (a b) | c
Търсене в индексаТърсене в индекса
SELECT name, price FROM items WHERE catsearch(name, 'книги',
'price < 500 order by price') > 0
CTXRULE CTXRULE ИндексиИндекси
Използват се за категоризиране на текстове
Работят само с колони от тип VARCHAR2 и CLOB
Използват таблица с предефинирани низове за търсене