DOAG SIG interMedia Mannheim, 13.11.2001 Oracle TEXT New Features Barbara Steinhanses Business Development Manger interMedia, Text und Lite Business Unit - Application Server Oracle Deutschland GmbH 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 @DAM / PictureSafe NextGen / Multicom Artesia Pinetree SailLabs DC4 / Digital Collections DMS / Quark Mediasurface Bulldog Rittershaus 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 DATASTORE SECTION GROUP STOPLIST - WORDLIST FILTER MEMORY 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 Soundex Kompositasuche • (unterschiedliche Sprachen) (Deutsch und Niederländisch) Multilinguale Stammsuche • Spanisch, Französisch, Deutsch, Niederländisch, Italienisch, Englisch Überblick - CONTEXT • 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 Oracle interMedia Der Text Index CREATE INDEX text_index ON articles(text) INDEXTYPE is context; strukturiert SELECT pubdate, author, title FROM articles WHERE pubdate BETWEEN ‘01-APR-98’ AND ‘10-APR-98’ AND CONTAINS (text,‘Oracle AND ABOUT (Internet)’) > 0 Volltext suche Themen suche 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 CONTEXT asynchron CTXCAT synchron CTX_DDL.sync_index als Teil der Transaktion auf der Basistabelle Operator CONTAINS CATSEARCH Abfragesprache Sehr umfangreich: Begrenzt: Indexpflege Boolesche Operatoren, Phrasensuche, Themensuche, Ähnlichkeitssuche, phonetische Suche, Kompositasuche, Wildcard + Doppel-Trunkierung, Prefix ... Phrasensuche, Boolesche Operatoren keine Wildcard-Suche in 8.1.7 eingeschränkt in 9.0.1 CONTEXT vs. CTXCAT Abfrage-Operatoren CONTEXT AbfrageSyntax Funktionalität A&B A|B A~B AB (A B) & C (A & B) | C accum, within, fuzzy, stem, wildcard, thesaurus, near, etc. CTXCAT AB A|B +A -B "A B" "A B" C (A B) | C AND, OR, AND-NOT, PHRASE CTXCAT - Beispiel CREATE TABLE EMP ( EMPNO number(4) NOT NULL, ENAME varchar2(10), HIREDATE date, skills varchar2(100) ); CTXCAT - Beispiel 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 ---------SMITH SKILL ------------------------INTERMEDIA, TEXT, ORACLE LITE CTXCAT - Index Set 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 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 DokumentenKlassifizierung, etc. Neuer Indextyp - verfügbar ab der Version 9.0.1 Klassifizierungsregeln auf der Grundlage von TEXT Queries Indiziert werden die, in einer Tabelle, gespeicherten Queries Überblick - CTXRULE 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 Vorgehensweise: Dokumenten-Klassifizierung 1. Anlegen einer Tabelle, in der die Regeln für die DokumentenKlassifizierung 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 ' ); Überblick - CTXRULE 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 Vorgehensweise: Dokumenten-Klassifizierung 4. … nun sollen eingehende Dokumente, die in der Tabelle NEWS gespeichert werden, automatisch über den MATCHES Operator klassifiziert werden SQL > desc NEWS newsid autor quelle artikel number varchar2(30) varchar2(30) clob 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 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; XML Indizierung XML Suche (Version 8.1.7) Nested Section - Suche <movie><title>Die Matrix</title></movie> <book><title>Einführung in die Matrix Algebra</title></book> select price from media where contains(desc, ‘matrix within title within movie’)>0 Suche nach Attributwerten <book author=“Barbara Steinhanses”>Oracle interMedia und DC4 </book> select title from books where contains(text, ‘Steinhanses within book@author’)>0 ORACLE 9i - XML TYPE 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 XPATH Operator 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 Mozart 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 AND @Komponist = "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 … zusätzliche neue Funktionalitäten …. Themen in unterschiedlichen Sprachen 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 User Dictionary für die Komposita Indizierung Beispieldatei für das Deutsche: $ORACLE_HOME/ctx/data/del/drde.dct Einträge für das deutsche Wort Hauptbahnhof Hauptbahnhof <tab>Haupt#Bahnhof Hauptbahnhofes<tab>Haupt#Bahnhof Hauptbahnhöfe <tab>Haupt#Bahnhof Hauptbahnhoefe<tab>Haupt#Bahnhof Format-Spalte - IGNORE 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' ); Local Partitioned TEXT Indexes 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’); Neue und aktualisierte Prozeduren 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; Weiterführende Informationen Oracle9i Text Reference, Oracle9i Text Application Developer’s Guide Oracle8i Documentation Addendum Release 3 (8.1.7) http://webiv.oraclecorp.com Note 119712.1 : „The InterMedia Text CTXCAT Indextype and How it Works“ Note 136395.1 : „Using Oracle 9i Document Classification New Feature“ Note 150307.1 „Technical Overview: Oracle TEXT Version 9.0.1“ Q U E S T I O N S A N S W E R S