DOAG SIG interMedia Mannheim, Barbara Steinhanses Business Development Manger interMedia, Text und Lite Business Unit - Application Server Oracle Deutschland GmbH Oracle TEXT New Features
Agenda Oracle TEXT - Indextypen CONTEXT, CTXCAT, CTXRULE XML - Suchmöglichkeiten und mehr...
Der Context Index Oracle8i Release 1 (8.1.5)
Überblick - CONTEXT Zielsetzung: für die Indizierung auch sehr grosser Dokumentenmengen - formatiert oder unformatiert - Speicherung in der Datenbank oder Extern sehr umfangreiche Volltextrecherche-Funktionalität contains Operator Asynchrone Indexpflege Datastore Präferenz für besondere und komplexe Anforderungen
Überblick - CONTEXT Integration in eine Vielzahl von Oracle Produkten: Oracle Portal Oracle IFS Oracle UltraSearch Oracle Applications und Grundlage einer Vielzahl von Partneranwendungen: Pirobase / Pironet DC4 / Digital / PictureSafe DMS / Quark NextGen / Multicom Mediasurface Artesia Bulldog Pinetree Rittershaus SailLabs NuGenesis … und viele andere Und natürlich einer Vielzahl von Endkunden-Anwendungen: Spiegel, ASV, Agrevo-Aventis, Bayer Leverkusen, AOK, Sat1, Kirch, …..
Überblick - CONTEXT Zulässige Datentypen für die TextSpalte: varchar2, char, long, (long raw), clob, blob, bfile, xmltype zulässige Parameter bei der CONTEXT-Indexerstellung: – LEXER - WORDLIST – DATASTORE - FILTER – SECTION GROUP - MEMORY – STOPLIST - STORAGE zulässige Präferenzen und Sonderspalten : Multi-Stop List und Multi-Lexer Sprache, Format und Characterset Spalten
Überblick - CONTEXT Exakte Wort/Phrasensuche Case-sentive Suche Baseletter Indizierung (z.B. Französisch, Spanisch,...) Alternative Schreibweisen (Deutsch, Dänisch, Schwedisch) Logische Kombinationen “and”, “or”, “not”, ”equivalence” Wildcard-Suche Erweiterungen : Fuzzy matching (unterschiedliche Sprachen) Soundex Kompositasuche (Deutsch und Niederländisch) Multilinguale Stammsuche Spanisch, Französisch, Deutsch, Niederländisch, Italienisch, Englisch
Near - Operator mit Distanzangabe und Reihenfolge Suche in Sektionen, Sätzen und Paragraphen Score-bezogene Funktionen accumulate, minus, weight Operationen auf Ergebnislisten: threshold ISO 2788 konformer Thesaurus Synonyme Themensuche (für Englisch + Französisch verfügbar) Unterstützung asiatischer Sprachen Überblick - CONTEXT
CREATE INDEX text_index ON articles(text) INDEXTYPE is context; CREATE INDEX text_index ON articles(text) INDEXTYPE is context; Indizierung Volltext suche SELECT pubdate, author, title FROM articles WHERE pubdate BETWEEN ‘01-APR-98’ AND ‘10-APR-98’ AND CONTAINS (text,‘Oracle AND ABOUT (Internet)’) > 0 SELECT pubdate, author, title FROM articles WHERE pubdate BETWEEN ‘01-APR-98’ AND ‘10-APR-98’ AND CONTAINS (text,‘Oracle AND ABOUT (Internet)’) > 0 Themen suche strukturiert Abfrage Oracle interMedia Der Text Index
DIGAS
Der CTXCAT Index Oracle8i Release 3 (8.1.7) Oracle9i Text Release 1 (9.0.1)
Überblick - CTXCAT Zielsetzung: für die Indizierung kleiner Text-Fragmente ( ca. 5 Worte) ggfs. mit zusätzlichen strukturierten Feldern und hohe Anforderungen an die Aktualität des Indexes Einfache Volltextrecherche Eigene Abfragesyntax Synchrone Indexpflege Index_Sets für die zusätzliche Indizierung von date, number Spalten
Überblick - CTXCAT Zulässige Datentypen für die TextSpalte: varchar2, char zulässige Parameter bei der CTXCAT-Indexerstellung: – INDEX SET – LEXER – MEMORY – STOPLIST – STORAGE – WORDLIST z.Zt. nicht zulässige Parameter, Präferenzen und Sonderspalten : Datastore, Filter oder Section Group Multi-Stop List und Multi-Lexer Sprache, Format und Characterset Spalten
Überblick - CTXCAT z.Zt. Keine Unterstützung von : – Document Services highlighting, markup, themes, gists – Query Services explain, query feedback, browse words (Support hierfür ist in einem späteren Release vorgesehen.) – Theme Indexing Japanische Sprachunterstützung: Index-Erstellung unter Verwendung von Prefix-Indizierung
CONTEXT vs. CTXCAT Funktionalität CONTEXTCTXCAT Indexpflegeasynchron CTX_DDL.sync_index synchron als Teil der Transaktion auf der Basistabelle OperatorCONTAINSCATSEARCH Abfragesprache Sehr umfangreich: Boolesche Operatoren, Phrasen- suche, Themensuche, Ähnlich- keitssuche, phonetische Suche, Kompositasuche, Wildcard + Doppel-Trunkierung, Prefix... Begrenzt: Phrasensuche, Boolesche Operatoren keine Wildcard-Suche in eingeschränkt in 9.0.1
CONTEXT vs. CTXCAT Abfrage-Operatoren AND, OR, AND-NOT, PHRASE accum, within, fuzzy, stem, wildcard, thesaurus, near, etc. Funktionalität Abfrage- Syntax CTXCATCONTEXT A & B A | B A ~ B A B (A B) & C (A & B) | C A B A | B +A -B "A B" "A B" C (A B) | C
CTXCAT - Beispiel CREATE TABLE EMP ( EMPNO number(4) NOT NULL, ENAME varchar2(10), HIREDATE date, skills varchar2(100) );
INSERT INTO EMP VALUES (7369, 'SMITH', TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), ‘ intermedia, Text, Oracle Lite '); commit; CTXCAT - Beispiel
CREATE INDEX emp_skills ON emp(skills) INDEXTYPE IS CTXSYS.CTXCAT PARAMETERS ('lexer ctxsys.basic_lexer stoplist ctxsys.default_stoplist memory 10m'); CTXCAT - Beispiel
select ename, skills from emp where catsearch (skills,' “oracle lite“ ', NULL ) > 0; ENAME SKILL SMITH INTERMEDIA, TEXT, ORACLE LITE CTXCAT - Beispiel
Erhöhung der Performance bei gemischten Abfragen (d.h. in Kombination mit einem CTXCAT-Index Sub-Indexes können auf eine oder mehrere strukturierte Spalten angelegt werden vorherige Analyse der “typischen” Abfragen der Anwendung ist notwendig ( Sub-Indexes sind den B-Tree Indexes ähnlich ) CTXCAT - Index Set
CTXCAT Gemische Abfragen mit Index Sets Erstellung des Index_Sets: exec ctx_ddl.create_index_set('emp_skills'); /* sub-index with hiredate */ exec ctx_ddl.add_index('emp_skills','hiredate'); Erstellung des kombinierten Indexes: CREATE INDEX emp_skills ON emp(skills) INDEXTYPE IS CTXSYS.CTXCAT PARAMETERS ('index set emp_skills');
Der CTXRULE Index Oracle9i Text Release 1 (9.0.1)
Überblick - CTXRULE Zielsetzung: für die Erstellung von Volltextsuch-basierten Routing-Systemen z.B. Push- Dienste oder eine query-basierte Dokumenten- Klassifizierung, etc. Neuer Indextyp - verfügbar ab der Version Klassifizierungsregeln auf der Grundlage von TEXT Queries Indiziert werden die, in einer Tabelle, gespeicherten Queries
Klassifiziert Dokumente nach dem Inhalt (anhand der Query), z.B. nach Ressorts wie Sport, Politik, Wirtschaft, … MATCHES Operator weist die Dokumente anhand der definierten Regeln zu für eine spätere Version geplant: Verschachtelung der Klassifikationsebenen, z.B. – Musik klassische Musik moderne Musik Überblick - CTXRULE
1. Anlegen einer Tabelle, in der die Regeln für die Dokumenten- Klassifizierung gespeichert werden 2. Erstellen der Regeln / Queries 3. Anlegen des CXTRULE Indexes 4. Verwendung des MATCHES Operators, um die Dokumente zu klassifizieren Vorgehensweise: Dokumenten-Klassifizierung
1. Anlegen einer Tabelle, in der die Regeln für die Dokumenten-Klassifizierung gespeichert werden CREATE TABLE Abfrageregeln_1 ( queryid NUMBER PRIMARY KEY, kategorie VARCHAR2(30), query VARCHAR2(2000) ); Vorgehensweise: Dokumenten-Klassifizierung
2. Erstellen der Regeln / Queries INSERT INTO Abfrageregeln_1 VALUES (1, 'Politik', ’Demokratische Partei OR Republikaner’ ); INSERT INTO Abfrageregeln_1 VALUES (2, ‘klassische Musik', ' (Mozart OR Bach) NOT (Pop OR {Moderne Musik} )’ ); Vorgehensweise: Dokumenten-Klassifizierung
Folgende TEXT Operatoren sind im Zusammenhang mit der MATCHES Funktionalität zulässig: – ABOUT, AND, EQUIVALENCE, NEAR, NOT, OR, PHRASE, STEM, WITHIN nicht zulässig sind: – ACCUM, EQUIV, FUZZY, MINUS, SOUNDEX, THRESHOLD, WEIGHT, WILDCARD Vorgehensweise: Dokumenten-Klassifizierung
3. Anlegen des CXTRULE Indexes CREATE INDEX abfrageregeln_1 _idx ON abfrageregeln _1 (query) INDEXTYPE IS CTXSYS.CTXRULE PARAMETERS ( ’ lexer my_basic_lexer wordlist my_wordlist ' ); Vorgehensweise: Dokumenten-Klassifizierung
Zulässige Datenformate für die TextSpalte: Ascii, HTML, XML zulässige Parameter bei der CTXRULE-Indexerstellung: – LEXER – MEMORY – STOPLIST – STORAGE – WORDLIST – SECTION GROUP z.Zt. nicht zulässige Parameter, Präferenzen und Sonderspalten : Datastore, Filter Überblick - CTXRULE
4. … nun sollen eingehende Dokumente, die in der Tabelle NEWS gespeichert werden, automatisch über den MATCHES Operator klassifiziert werden SQL > desc NEWS newsidnumber autorvarchar2(30) quellevarchar2(30) artikelclob Vorgehensweise: Dokumenten-Klassifizierung
4. Die Klassifizierung der Dokumente kann z.B. über einen BEFORE INSERT TRIGGER erfolgen. Die ermittelten Kategorien werden in diesem Beispiel in einer separaten Tabelle news_klassifizierung gespeichert Vorgehensweise: Dokumenten-Klassifizierung BEGIN FOR c1 IN (select kategorie from abfrageregeln_1 where MATCHES (query, :new.article) > 0 ) LOOP INSERT INTO news_klassifizierung (newsid, kategorie) VALUES (:new.newsid, c1.kategorie); END LOOP; END;
Richtlinien DML updated den Index asynchron Das Dokument : Ist nicht indiziert wird geparsed, wenn MATCHES aufgerufen wird muss nicht in der DB gespeichert werden Die MATCHES Funktion: gilt nur mit einem RULE index erlaubt eine Teilmenge der Text Query Operatoren kann aus einem Trigger aufgerufen werden Japanische Dokumente können nicht klassifiziert werden, da Wildcards nicht unterstützt werden Vorgehensweise: Dokumenten-Klassifizierung
XML Indizierung
Nested Section - Suche Die Matrix Einführung in die Matrix - Algebra select price from media where contains(desc, ‘matrix within title within movie’)>0 Suche nach Attributwerten Oracle interMedia und DC4 select title from books where contains(text, ‘Steinhanses within XML Suche (Version 8.1.7)
Neuer Oracle 9i Server-Datentyp Speichern von XML Dokumenten in der DB implementiert als CLOB prüft XML-Dokumente auf well-formed durchsuchbar mit SQL mit XPATH Unterstützung Zugriff über SQL oder PL/SQL Funktionen wie getClobVal() Operationen wie Extract() und ExistsNode() Alle neuen SQL Funktionen liefern XML Dokumente als XML_TYPE zurück Spalten vom Typ XML_TYPE können mit 9i TEXT indiziert werden weitere Infos hierzu: Oracle 9i New Features - Kapitel 2 zu XML Enhancements ORACLE 9 i - XML TYPE
2 neue XPATH Operatoren in 9i TEXT: – INPATH – HASPATH Für beide Operatoren gilt: Suche nach XML-Dokumenten basiert auf: – section paths – section path contents Verwendung von CONTAINS Indizierung mit der PATH_SECTION_GROUP XPATH Operator
INPATH Operator ähnlich dem WITHIN Operator, aber nicht Angabe eines einzelnen Sektionsnamens sondern Angabe eines Pfades(PATH) ermöglicht die Volltext-Suche innerhalb – eines Elementes / Tag ( = Sektion) – eines XML-Pfades ( = Sektions-Pfad) – eines XML-Pfades, in dem Wildcards verwendet werden – eines Elementes mit Attributwerten bitte beachten: XML Tags und Attriubutwerte sind CASE-SENSITIV XPATH Operator
Einfaches INPATH Beispiel M ozart im top-level Element Musik: SELECT id, doc_name FROM doc WHERE CONTAINS ( text, 'Mozart INPATH (Musik) ') > 0; Mozart im XML-Pfad Musik/Oper: Mozart INPATH (Musik/Oper) Mozart im Element Musik mit dem Attribut Oper =Magische Flöte Mozart INPATH (Musik[Oper="Magische Flöte"]) XPATH Operator
INPATH Examples with Wildcards Mozart im Element Musik - auf beliebiger Ebene Mozart INPATH (//Musik) Mozart im Element Oper mit einem höher geordeneten Element Musik Mozart INPATH (music//opera) Mozart im Element Oper mit dem Grandparent Element Musik Mozart INPATH (music/*/opera) Mozart Element Oper m. untersch. bezeichneten übergeordneten Knoten Mozart INPATH (music/*/classical/*/*/opera) XPATH Operator
INPATH Beispiele mit Booleschen Operatoren Mozart im Element Musik ohne nachfolgendes Element Jazz Mozart INPATH (Musik[NOT(Jazz)]) Mozart im Element Musik mit nachfolgenden Elementen Flöte UND Piano Mozart INPATH (Musik[Flöte AND Piano]) Mozart im Element Musik mit nachfolgenden Elementen Flöte ODER Piano Mozart INPATH (Musik[Flöte OR Piano]) Mozart im Element Musik mit dem nachfolgenden Elementen Oper UND dem Attributwert Komponist = Bach Mozart INPATH (Musik[Oper = "Bach"]) XPATH Operator
HASPATH Operator Suche auf alle XML-Dokumente im angegebenen XML-Pfad … HASPATH (Musik/Oper/Komponist)... Suche auf alle XML-Dokumente, die den spezifischen Wert im angegebenen XML-Pfad aufweisen … HASPATH (Musik = “Mozart”)... Der Index MUSS mit der PATH_SECTION_GROUP erstellt werden Verwendung von // und * Wildcards XPATH Operator
… zusätzliche neue Funktionalitäten ….
Unterstützt werden in Oracle 9i Themen für alle single-byte Sprachen, deren Worte durch Leerzeichenen getrennt werden. Themenanalyse mit Hilfe einer Knowledge Base Knowledge Base basiert auf einem Thesaurus Verwendung des ABOUT Operators spezieller Themen-Index Themen in unterschiedlichen Sprachen
Erstellung, bzw. Erweiterung der vorhandenen Knowledge Base (englisch, französisch) mit dem ctxkbtc compiler NLS_LANG muss gesetzt sein Thesaurus muss entsprechend geladen sein Stopwortliste kann der Knowledge Base hinzu compiliert werden Ist keine Knowledge Base für die Sprache vorhanden werden Themen aus dem entsprechenden Thesaurus abgeleitet Themen in unterschiedlichen Sprachen
Beispieldatei für das Deutsche: $ORACLE_HOME/ctx/data/del/drde.dct Einträge für das deutsche Wort Hauptbahnhof Hauptbahnhof Haupt#Bahnhof Hauptbahnhofes Haupt#Bahnhof Hauptbahnhöfe Haupt#Bahnhof Hauptbahnhoefe Haupt#Bahnhof User Dictionary für die Komposita Indizierung
In 9i Text gibt es für die Formatspalte einen neuen Wert : => IGNORE IGNORE bedeutet, dass die Zeile nicht indiziert werden soll für Zeilen, die Daten enthalten, die nicht text-indiziert werden können, wie z.B. Bilder, Audios, Videos,... Beispiel: CREATE INDEX dokument_idx ON dokumente(description) INDEXTYPE IS ctxsys.context PARAMETERS ( 'FORMAT COLUMN descr_type' ); Format-Spalte - IGNORE
Local Partitioned Text Indexes können auf Tabellen angelegt werden, die RANGE partitioniert sind maximale Anzahl von Partitionen pro Index 9999 Beispiel: create table ptest (id number, text varchar2(80)) partition by range (id) (partition p1 values less than (200), partition p2 values less than (400), partition p3 values less than (700)); create index ptest_idx on ptest (text) indextype is ctxsys.context local parameters (‘filter ctxsys.inso_filter’); Local Partitioned TEXT Indexes
CTX_DDL modifizierte Prozeduren: SYNC_INDEX hat 2 neue Parameter : - für das Spezifizieren der Memory-Grösse - und für die Angabe von Partitionen Beispiel: begin ctx_ddl.sync_index(’BSE_INDEX’, ’2M’, ’P2’); end; Neue und aktualisierte Prozeduren
Weiterführende Informationen Oracle9i Text Reference, Oracle9i Text Application Developer’s Guide Oracle8i Documentation Addendum Release 3 (8.1.7) Note : „The InterMedia Text CTXCAT Indextype and How it Works“ Note : „Using Oracle 9i Document Classification New Feature“ Note „Technical Overview: Oracle TEXT Version 9.0.1“
A Q & Q U E S T I O N S A N S W E R S