Oracle Text: AllesTextOderWas?

Ähnliche Dokumente
Mehr als einfache Texte Alleskönner ORACLE TEXT

Partitioning mit Oracle Text 9i

Mehr Ergebnisse: Linguistische Funktionen und Ähnlichkeitssuche mit SQL. Carsten Czarski ORACLE Deutschland B.V. & Co KG München

Oracle 10g Einführung

Neues in Oracle Text

Datenbanken für Online Untersuchungen

Roland Tilgner. Solution Architects & Team Coaching DEVELOPMENT. ORACLE TEXT AUS PL/SQL-SICHT Features und Möglichkeiten

<Insert Picture Here> Security-Basics. Privilegien, Rollen, SQL und PL/SQL - inkl. 12c-Update. Carsten Czarski, ORACLE Deutschland B.V. Co.

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

IT-Symposium

PHP und MySQL. Integration von MySQL in PHP. Zellescher Weg 12 Willers-Bau A109 Tel Michael Kluge (michael.kluge@tu-dresden.

5.8 Bibliotheken für PostgreSQL

Datenbanken SQL. Insert, Update, Delete, Drop. Krebs

Ulrike Schwinn Dipl.-Math. Oracle Deutschland GmbH. Kultur und Informatik - Datenverwaltung 04.Juli 2007

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

4. Objektrelationales Typsystem Kollektionstypen. Nested Table

SQL (Structured Query Language) Schemata Datentypen

Inhalt. Ein Einführung in die Nutzung von SQL-Datenbanken am Beispiel Oracle. Daten und Tabellen - ein Beispiel. Daten und Tabellen - Normalisierung

Views in SQL. 2 Anlegen und Verwenden von Views 2

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Metadaten

XML in der Oracle Datenbank

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

PHP + MySQL. Die MySQL-Datenbank. Hochschule Karlsruhe Technik & Wirtschaft Internet-Technologien T3B250 SS2014 Prof. Dipl.-Ing.

DB2 SQL, der Systemkatalog & Aktive Datenbanken

SQL structured query language

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Dipl. Inf. Eric Winter. PostgreSQLals HugeData Storage Ein Erfahrungsbericht

Einführung in SQL. 1. Grundlagen SQL. Structured Query Language. Viele Dialekte. Unterteilung: i. DDL (Data Definition Language)

NoSQL mit Postgres 15. Juni 2015

Oracle12c für Entwickler

Tuning the Mobile Server

Relationales Datenbanksystem Oracle

Beispiel zur referentiellen Integrität

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Parallele Programmierung in SQL und PL/SQL. Peter Bekiesch Dierk Lenz DOAG 2011 Konferenz und Ausstellung 17. November 2011

PostgreSQL unter Debian Linux

Inhaltsverzeichnis. Vorwort Kapitel 1 Einleitung... 15

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

Regionaltreffen Rhein Main 26. März 2007

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Einstieg in das SQL- und Datenbanktuning Loblied auf den Tabellen-Index!

Oracle 12c: Neuerungen in PL/SQL. Roman Pyro DOAG 2014 Konferenz

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023

Naxtron GmbH Schlosstalstrasse Winterthur. Subject. New Features Oracle 9i Tuning. Edo Bezemer. Author

Funktion definieren Gibt Summe der Gehälter zurück. Aufruf in einem SQL-Statement

Die Datenmanipulationssprache SQL

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #6. SQL (Teil 4)

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

7. XML-Datenbanksysteme und SQL/XML

Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11

Firebird 2.1 Das freie RDBMS. Robert Dollinger

Oracle Text. Katerina Mpalaska Senior Sales Consultant Server Technologies Competence Center Stuttgart. Oracle Deutschland GmbH

Java Database Connectivity-API (JDBC)

In diesem Abschnitt wollen wir uns mit der Architektur von Datenbank Managements Systemen beschäftigen.

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

SQL als Zugriffssprache

MySQL 101 Wie man einen MySQL-Server am besten absichert

Intelligente Textanalyse. Oracle 9i

Automatisierte Datenmigration mit dynamischen SQL

Referenzielle Integrität SQL

Kuriositäten in der Oracle-Datenbank

Chancen und Wachstumsfelder für PostgreSQL

Oracle Datenbank Architektur nicht nur für Einsteiger. Martin Klier Klug GmbH integrierte Systeme, Teunz

Vergessene (?) SQL- und PL/SQL- Funktionen

Kapitel 4 Dynamisches SQL

Hilfe meine Oracle Datenbank spricht nicht mit meiner JSP

Fortgeschrittene SQL-Techniken für APEX-Formulare und Reports

Abfragen (Queries, Subqueries)

SQL. Fortgeschrittene Konzepte Auszug

Es geht also im die SQL Data Manipulation Language.

Dipl. Wirtsch.-Ing. Lars Geldner Nürnberg,

Bibliografische Informationen digitalisiert durch

SQL. Datenmanipulation. Datenmanipulationssprache. Ein neues Tupel hinzufügen. Das INSERT Statement

Transaktionsverwaltung

Dokumentation zur Anlage eines JDBC Senders

PostgreSQL in großen Installationen

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

Datenbankstatistiken im Griff mit DBMS_STATS. DOAG 2012 Konferenz + Ausstellung Nürnberg 21. November 2012

Oracle 9i Einführung Performance Tuning

Strukturierte Objekttypen

XML-Datenaustausch in der Praxis Projekt TOMIS bei der ThyssenKrupp Stahl AG

XML in der Oracle Datenbank "relational and beyond"

DOAG Regionaltreffen TABLE REORG. Klaus Reimers. Leiter Beratung & Entwicklung, ORDIX AG, Paderborn

Aufgabenstellung. Bekannte Lösungsansätze. Die Idee. Native Informix Architektur

Datenbank- und Informationssysteme - Übungsblatt 6 -

Markus Feichtinger. Power Systems. Der Weg zu POWER! 2009 IBM Corporation

Einführung in SQL. Sprachumfang: Indizes. Datensätzen. Zugriffsrechten

Übung 7 DBMS-FUNKTIONALITÄTEN UND DATENIMPORT

Transkript:

Oracle Text: AllesTextOderWas? Benedikt Nahlovsky Performing Databases GmbH Mitterteich 2

Referent Benedikt Nahlovsky Datenbankspezialist & Performance-Firefighter Fachliche Schwerpunkte: Performanceoptimierung / Tuning Cluster und Replikation Upgrade / Migration Kontakt: benedikt.nahlovsky@performing-db.com Weblog: http://oradbn.wordpress.com 3

Performing Databases Spezialisten für Datenbanktechnik Konzeptberatung Architektur- und Systemplanung Lizenzierung Realisierung und Troubleshooting Kontakt: Performing Databases GmbH Wiesauer Straße 27 95666 Mitterteich Web: http://www.performing-databases.com Mail: info@performing-db.com Twitter: @PerformingDB 4

International im Einsatz Planung Lizenzierung Umsetzung Tuning Troubleshooting Wartung Upgrade Migration 5

Oracle Text seit Oracle Version 7 die Möglichkeit zur Volltextsuche ab Version 8 in kostenpflichtiges Modul intermedia integriert seit Version 9i fester Bestandteil der Datenbank in allen Versionen kostenlos (XE, SE, SE2, EE) zur sofortigen Verwendung sind nur wenige Schritte notwendig 6

Installation Installation notwendig, um die Oracle Text PL/SQL Packages zu verwenden Funktionen im Schema CTXSYS enthalten SQL> conn / as sysdba Connected. SQL> @?/ctx/admin/catctx.sql ctxsys SYSAUX TEMP NOLOCK...creating user CTXSYS User benötigen die Rolle CTXAPP Standard Spracheinstellung hinterlegen SQL> conn ctxsys/ctxsys Connected. SQL> @?/ctx/admin/defaults/dr0defin.sql "GERMAN"; 7

Überprüfung SQL> select comp_name, status, version from dba_registry where comp_id='context'; COMP_NAME STATUS VERSION ----------------------------- ----------- ---------- Oracle Text VALID 11.2.0.4.0 SQL> grant ctxapp to perfdbtext; Grant succeeded. > Oracle Text kann mit dem Schema perfdbtext nun verwendet werden 8

Wie funktioniert Oracle Text? 1. Dokumente werden in sogenannte Datastores eingelesen DIRECT_DATASTORE (CLOB, VARCHAR2, etc.) FILE_DATASTORE (Filesystem am DB Server) URL_DATASTORE (Inter- bzw. Intranet) USER_DATASTORE (selbst definierte Prozedur) Internet O/S file system DB Datastore Filter 9

Wie funktioniert Oracle Text? 2. Filter Umwandlung von Binärdokumenten in Text oder HTML nur bei Word- oder PDF-Dokumenten notwendig Text-, HTML- und XML-Dateien ausgeschlossen Oracle erkennt über 150 Formate automatisch Datastore Filter Sectioner 10

Wie funktioniert Oracle Text? 3. Sectioner teilt HTML- oder XML-Dokumente anhand von Tags in einzelne Abschnitte auf HTML: <H1> </H1> XML: <Produktbeschreibung> </Produktbeschreibung> Filter Sectioner Lexer 11

Wie funktioniert Oracle Text? 4. Lexer extrahiert relevante Wörter aus dem Text (Tokens) Interpunktions- und Sonderzeichen werden entfernt Trennzeichen Definition Case Sensitive / Case Insensitive Aufteilung zusammengesetzter Worte Sectioner Lexer Indexing Engine 12

Wie funktioniert Oracle Text? 5. Indexing Engine aus den gesammelten Worten wird invertierter Index erzeugt Oracle Text Stoplists werden nicht indiziert Wordlist Einstellungen anhand grammatikalischer Regeln Beugungsformen des gesuchten Wortes mit ähnlichem Stamm werden erkannt Wordlist Stoplist Lexer Indexing Engine 13

Wie funktioniert Oracle Text? Internet O/S file system DB Wordlist Stoplist Datastore Filter Sectioner Lexer Indexing Engine Document Text HTML Token Text Indexes Für die verschiedenen Schritte können separat Präferenzen und Attribute gesetzt werden. 14

Stoplist Wörter werden nicht indiziert bei Abfragen werden diese nicht berücksichtigt CTX.DEFAULT_STOPLIST (abhängig von Spracheinstellung) Bindewörter, Präpositionen, Artikel betroffen Anwenderspezifische Stoplists können erstellt werden in der Tabelle CTX_STOPWORDS sind die Stopwords zu finden mit Zuordnung zu welcher Stoplist diese gehören in der Tabelle CTX_STOPLISTS die Listen mit Schemazuordnung 15

Stoplist anlegen Stoplists sollten immer im entsprechenden Schema angelegt werden branchenspezifische Stopwords können hinterlegt werden begin ctx_ddl.add_stopword( 'AIRPORT_STOPLIST', 'Abflug' ); end; 16

Ablage der Indexinformationen Ablage in DR$ Tabellen - Naming-Convention immer gleich Es beginnt mit dem Präfix DR Bei nicht partitionierten Indizes folgt ein $, bei partitionierten Indizes ein # Dann folgt der Name des Volltextindexes Bei einem partitionierten Index folgt auf den Namen eine Partitions-ID Es folgt ein $ Abschließend folgt ein Suffix, welches die genaue Aufgabe der Tabelle bezeichnet Syntax: DR$<NAME>$<SUFFIX> 17

$I: Token Tabelle eigentliche Index Tabelle speichert die Tokens (einzelne Wörter) welche sich durch die Zerlegung des Fließtextes ergeben haben ab (TOKEN_TEXT) Spalte TOKEN_INFO enthält die Informationen, in welchem Dokument, an welchen Stellen das jeweilige Token vorkommt Syntax: DR$<NAME>$I 18

$R: Mapping von DOCID auf ROWID Oracle Text arbeitet intern nicht mit ROWIDs als Zeiger auf die Tabellenzeilen, sondern mit DOCIDs erste Zeile erhält DOCID 1, dann wird weitergezählt ein Volltext-Index ist eine invertierte Liste - mehrere Einträge können auf eine Tabellenzeile zeigen anhand der DOCID kann die ROWID herausgesucht werden Syntax: DR$<NAME>$R 19

$K: Mapping von ROWID auf DOCID ist das Gegenstück zur $R-Tabelle anhand einer ROWID findet Sie die für den Textindex relevanten DOCIDs heraus wichtig bei DML Operationen Syntax: DR$<NAME>$K 20

$N: Negativliste enthält gelöschte Dokumente Oracle Text arbeitete prinzipiell asynchron bei INSERT-Anweisung wird die ROWID in eine Pending - Tabelle eingetragen (SYNC-Operation notwendig) bei DELETE-Anweisung wird die DOCID ermittelt ($K-Tabelle) und trägt diese in die Negativliste ein bei SELECT-Operationen ermittelt Oracle Text die Treffermenge ganz normal und filtert dann die Einträge der Negativliste heraus Syntax: DR$<NAME>$N 21

Index Types Index Type Application Type Query Operator CONTEXT Text besteht aus großen Dokumenten Word, HTML, XML CONTAINS CTXCAT CTXRULE kleine Textbruchstücke Artikelnamen, Preise, Beschreibungen Dokumenten- klassifizierung Anwendung auf Such- Strings CATSEARCH MATCHES 22

Beispiel Context Index CREATE TABLE TEXTTAB ( ID NUMBER NOT NULL, TEXT VARCHAR2(800), CONSTRAINT TEXTTAB_PK PRIMARY KEY ( ID ) ENABLE ); Table created. SQL> rows inserted SQL> CREATE INDEX text_idx ON texttab(text) INDEXTYPE IS ctxsys.context; Index created. SQL> 23

Beispiel Context Index Syntax: SELECT spaltenliste FROM tabelle WHERE CONTAINS(index_spalte, '<suchbegriff>')>0; Einfache Suche nach Wörtern, z.b.: SQL> SELECT * FROM texttab WHERE CONTAINS(text, 'Landkreis') > 0; ID TEXT --------------------------------------------------------- 5 Der Landkreis Schwandorf liegt in Bayern. 6 Der Landkreis Regensburg ist größer als Schwandorf. 9 Mitterteich liegt im Landkreis Tirschenreuth. SQL> 24

Beispiel Context Index Suche nach Wort-Kombinationen oder -Alternativen mit den Booleschen Operatoren AND und OR SQL> SELECT * FROM texttab WHERE CONTAINS(text, 'Landkreis AND Bayern') > 0; ID TEXT --------------------------------------------------------- 5 Der Landkreis Schwandorf liegt in Bayern. SQL> SQL> SELECT * FROM texttab WHERE CONTAINS(text, 'Landkreis OR Bayern') > 0; ID TEXT ---------------------------------------------------------- 2 Die Landeshauptstadt von Bayern ist Munchen. 5 Der Landkreis Schwandorf liegt in Bayern. 6 Der Landkreis Regensburg ist größer als Schwandorf. 9 Mitterteich liegt im Landkreis Tirschenreuth. SQL> 25

Beispiel Context Index Suche nach ähnlich geschriebenen Wörtern mit dem Operator? SQL> SELECT * FROM texttab WHERE CONTAINS(text, '?Baiern') > 0; ID TEXT --------------------------------------------------------- 2 Die Landeshauptstadt von Bayern ist Munchen. 5 Der Landkreis Schwandorf liegt in Bayern. SQL> Suche mit Wildcards: % für kein oder beliebig viele Zeichen und _ für genau 1 Zeichen SQL> SELECT * FROM texttab WHERE CONTAINS(text, '%dor_') > 0; ID TEXT --------------------------------------------------------- 5 Der Landkreis Schwandorf liegt in Bayern. 6 Der Landkreis Regensburg ist größer als Schwandorf. SQL> 26

Beispiel Context Index Suche nach Ausdrücken, die denselben Wortstamm haben wie das Suchwort oder mit dem Suchwort zusammengesetzte Worte bilden, mit dem Operator $ : SQL> SELECT * FROM texttab WHERE CONTAINS(text, '$liegen') > 0; ID TEXT --------------------------------------------------------- 5 Der Landkreis Schwandorf liegt in Bayern. 9 Mitterteich liegt im Landkreis Tirschenreuth. SQL> 27

Index Sync 1. Manuell SQL> INSERT INTO texttab VALUES(11, 'New York ist eine Stadt an der Ostseekuste in den USA'); 1 row created. SQL> SELECT * FROM texttab WHERE CONTAINS(text, 'USA') > 0; no rows selected SQL> exec ctx_ddl.sync_index('text_idx'); PL/SQL procedure successfully completed. SQL> SELECT * FROM texttab WHERE CONTAINS(text, 'USA') > 0; ID TEXT -------------------------------------------------------------------- 11 New York ist eine Stadt an der Ostkuste in den USA SQL> 28

Index Sync 2. Automatisch in regelmäßigen Intervallen beim Anlegen (create index) SQL> CREATE INDEX text_idx ON texttab(text) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('SYNC (EVERY "TRUNC(sysdate)+1/24")'); Index created. oder nachträglich (alter index) SQL> ALTER INDEX text_idx REBUILD PARAMETERS (REPLACE METADATA 'SYNC (EVERY "TRUNC(sysdate)+1/24")'; Index altered. 29

Index Sync 3. Automatisch nach Commit (ab 10g - seltene DML Operationen) beim Anlegen (create index) SQL> CREATE INDEX text_id ON texttab(text) INDEXTYPE IS ctxsys.context PARAMETERS ('SYNC (ON COMMIT)'); Index created. oder nachträglich (alter index) SQL> ALTER INDEX text_id REBUILD PARAMETERS ('REPLACE METADATA SYNC (ON COMMIT)'); Index altered. 30

Index Sync 4. Automatisch nach jeder Transaktion (ab 10g) beim Anlegen (create index) SQL> CREATE INDEX text_id ON texttab(text) INDEXTYPE IS ctxsys.context PARAMETERS ('TRANSACTIONAL'); Index created. oder nachträglich (alter index) SQL> ALTER INDEX text_id REBUILD PARAMETERS ('REPLACE METADATA TRANSACTIONAL)'); Index altered. 31

Index Optimierung CTX_DDL.OPTIMIZE_INDEX in regelmäßigen Abständen ausführen DBA_SCHEDULER_JOB SQL> BEGIN 1 ctx_ddl.optimize_index(index_name => 'text_idx', optlevel => 'FULL'); 2 END; 32

12c New Features Erhöhung von MAX_INDEX_MEMORY für mehr OPTIMIZE und CREATE Performance Near Real Time Index: Häufige Index Syncs ohne Fragmentierung BIG_IO: Neue Indexarchitektur reduziert Index Lookups bei großen Indexfragmenten Pattern Stopclass: reguläre Ausdrücke für Tokens, die nicht indiziert werden sollen 33

Tipps großer TEMP Tablespace Oracle Text Indizes sollten ständig optimiert und gewartet werden Index-Tabellen klein halten nutzen Sie Partitionierung (DR$-Tabellen werden aufgeteilt) 34

Fazit Oracle Text ist ein mächtiges und oftmals unterschätztes Werkzeug feste Integration, keine zusätzlichen Kosten ständige Weiterentwicklung in den neuen Datenbank- Versionen 35

Download Präsentation und Whitepaper http://www.performing-databases.com 36