oracle text eine oracle perle - doag.org · pdf filewalking in my shoes depeche mode pop...
TRANSCRIPT
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Oracle Text – eine Oracle PerleDOAG-Konferenz, Nürnberg
2.12.2008
Carsten Herder - Senior BeraterOPITZ CONSULTING
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
AgendaEin erstes Beispiel
Einen Index erstellen
Benutzereinstellungen
Suchtechniken
Mixed Queries
Suchen in der Praxis
Ein Blick hinter die Kulissen
Synchronisation
Fragmentierung
Fazit, Fragen
Oracle Text
Textsuche
Administration
Ein Fazit
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
Suchstrategien
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Warum Oracle Text?
Während früher vor allem strukturierte Daten in Datenbanken
gespeichert wurden, werden heute zunehmend auch immer
mehr unstrukturierte Daten in Datenbanken abgelegt, z.B.
- Artikelbeschreibungen
- Musiktitel und Songtexte
- Dokumente
Doch wie sucht man in diesen Texten?
LIKE % oder INSTR als Suchen sind sehr unperformant, weil sie
keine Indizes verwenden (FTS!)
Oracle Text bietet index-basierte Suche nach Wörtern in Texten
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Ein erstes Beispiel…
Suche in der Tabelle MUSIKTITEL nach musikalischen Werken
TITEL INTERPRET KATEGORIE JAHR
We are the champions Queen Rock 1977
World in my Eyes Depeche Mode Pop 1990
Walking in my Shoes Depeche Mode Pop 1993
Voyage of Gurdjieff Therion Heavy Metal 2004
Faerie Queen Blackmore´s Night Pop 2006
World of Stone Blackmore‘s Night Pop 2006
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Ein erstes Beispiel…
CREATE INDEX titel_ctx ON musiktitel(titel)
INDEXTYPE IS ctxsys.context;
SELECT *
FROM musiktitel
WHERE CONTAINS(titel, ‘World‘) > 0;
TITEL INTERPRET KATEGORIE JAHR
World in my Eyes Depeche Mode Pop 1990
World of Stone Blackmore‘s Night Pop 2006
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Filter
## ###
#### #
### ##
Sectioner## #
###
# ##
## #
###
# ##
Indizierung
Lexer
Datastore
Éü
## ###
#### #
### ##
Benutzereinstellungen bei Erstellung
eines Textindex…
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
DIRECT_DATASTORE
Textspalte als Datenquelle
Typ VARCHAR2, CHAR, CLOB, BLOB, u.a.
Éü
Filter
Sectioner## #
###
# ##
## #
###
# ##
Indizierung
Lexer Éü
## ###
#### #
### ##Datastore## ###
#### #
### ##
TITEL INTERPRET KATEGORIE
We are the champions Queen Rock
World in my Eyes Depeche Mode Pop
Walking in my Shoes Depeche Mode Pop
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
MULTI_COLUMN_DATASTORE
Index über zwei oder mehr (Text-)Spalten.
Die Spalteninhalte werden virtuell
aneinandergehängt
Definition der Spalten über Preferences
Éü
Filter
Sectioner## #
###
# ##
## #
###
# ##
Indizierung
Lexer Éü
## ###
#### #
### ##Datastore## ###
#### #
### ##
TITEL INTERPRET KATEGORIE
We are the champions Queen Rock
World in my Eyes Depeche Mode Pop
Walking in my Shoes Depeche Mode Pop
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
MULTI_COLUMN_DATASTORE
BEGIN
ctx_ddl.create_preference(
'mcs',
'MULTI_COLUMN_DATASTORE );
ctx_ddl.set_attribute(
‚mcs',
'columns',
'titel, interpret');
END;
CREATE INDEX mt_ctx ON musiktitel(titel)
INDEXTYPE IS ctxsys.context
PARAMETERS ('DATASTORE mcs');
Éü
Filter
Sectioner## #
###
# ##
## #
###
# ##
Indizierung
Lexer Éü
## ###
#### #
### ##Datastore## ###
#### #
### ##
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
.csv.txt.doc .pdf.ppt
Filter
Extrahiert Text aus Binärdokumenten.
BINARY
.hmtl
TEXT
Éü
Sectioner## #
###
# ##
## #
###
# ##
Indizierung
Lexer Éü
## ###
#### #
### ##Datastore## ###
#### #
### ##
Filter
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Éü
Indizierung
Lexer Éü
## ###
#### #
### ##Datastore## ###
#### #
### ##
Filter
Sectioner## #
###
# ##
## #
###
# ##
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
Der Sectioner
Zerlegt den Text in
- Sektionsinformation
- Textinformation
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Der Lexer
Zerlegt den Text in einzelne Wörter
Definiert Trennzeichen (z.B. „-“ oder „_“)
UPPERCASE- oder MixedCase-Indizierung?
Spracheinstellungen
We are the Champions
We
are
the
ChampionsSectioner
## #
###
# ##
## #
###
# ##
Indizierung
## ###
#### #
### ##Datastore## ###
#### #
### ##
Filter
Lexer Éü
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Index aufbauen
Wird später im Detail beschrieben…
Mit Stoppwortlisten kann man Worte
definieren, die wegen ihrer geringen
Selektivität bei der Indizierung ignoriert
werden (z.B. „der“, „die“, „das“)Sectioner## #
###
# ##
## #
###
# ##
## ###
#### #
### ##Datastore## ###
#### #
### ##
Filter
Indizierung
ÉüLexer Éü
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Textsuche
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
AND- und OR-Operator
SELECT *
FROM musiktitel
WHERE contains(titel, ‘world AND eyes‘) > 0;
SELECT *
FROM musiktitel
WHERE contains(titel, ‘world OR eyes‘) > 0;
TITEL INTERPRET KATEGORIE JAHR
World in my Eyes Depeche Mode Pop 1990
World of Stone Blackmore‘s Night Pop 2006
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
WITHIN-Operator zur Suche in Sektionen
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
HTML_TITEL_INFO
<TITEL> Faerie Queen </TITEL>
<INTERP> Blackmore´s Night </INTERP>
SELECT *
FROM musiktitel
WHERE CONTAINS(html_titel_info,
‘ queen WITHIN TITLE
AND night WITHIN INTERP ‘) > 0;
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Proximity Search mit NEAR (;)
SELECT *
FROM musiktitel
WHERE contains(songtext, ‘münchen;hofbräuhaus‘) > 0;
SONGTEXT
München Hofbräuhaus
Hofbräuhaus München
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
SELECT *
FROM musiktitel
WHERE contains(songtext, ‘lola AND $ rannte‘) > 0;
Stemming ($) – Wörter mit demselben Wortstamm
rannte rennen
rennt
gerannt
Termexpansion!!…
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Termexpansion mit CTX_QUERY.EXPLAIN analysieren
EXECUTE CTX_QUERY.EXPLAIN(
index_name => 'tit_ctxidx',
text_query => '$rannte',
explain_table => 'test_explain',
sharelevel => 0
);
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Weitere Termexpansionen…
Unscharfe Suche mit Fuzzy-Operator (?)CONTAINS(titel, ‘?Waking‘)
Wildcard-Suche mit %CONTAINS(titel, ‘champ%‘)
Klangähnliche Wörter mit Soundex (!)CONTAINS(titel, ‘!Wolking‘)
Synonymsuche mit SYN-OperatorCONTAINS(titel, ‘SYN(sepp, syn_liste)‘)
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Mixed Queries
In der Praxis möchte man oft Datensätze kombiniert durch
eine Textquery und eine strukturierte Query ermitteln.
SELECT *
FROM musiktitel
WHERE contains(titel, ‘champions‘) > 0
AND kategorie = ‘Rock‘
AND jahr BETWEEN 1975 AND 1980
ORDER BY jahr;
Problematisch, falls sowohl Textsuche als auch unstrukturierte
Suchen wenig selektiv sind
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Mixed Queries
COMPOSITE DOMAIN INDEX (CDI) kombiniert einen
Textindex mit strukturierten Daten (11gR1)
CREATE INDEX titel_ctx ON musiktitel(titel)
INDEXTYPE IS ctxsys.context
FILTER BY kategorie, jahr
ORDER BY jahr;
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Suchstrategien Textsuche in der Praxis
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Anwendungsfallgruppe 1: „Eindeutige Identifizierung“
Beispiele:
Artikelnummer anhand einer Artikelbeschreibung identifizieren
Musikalisches Werk anhand von Titel- und
Interpreteninformationen identifizieren
Strategievorschlag:
Algorithmische Suche
Zunächst „scharfe“ Suche
Falls erforderlich schrittweise Aufweichung der
Suchbedingungen
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
CONTAINS(titel, ‘danzing AND queen‘)
CONTAINS(titel, ‘?danzing AND ?queen‘)
CONTAINS(titel, ‘danzing OR queen‘)
Eindeutiger
Treffer oder
TrefferlisteKein Treffer
Kein Treffer
Kein Treffer
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
Suche endet trefferlos
Anwendungsfallgruppe 1: „Eindeutige Identifizierung“
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Anwendungsfallgruppe 2:
„Google-ähnliche Dokumentensuche“
Beispiele:
Alle Zeitungsartikel in der Datenbank finden, welche die
Begriffe „Kioto“ und „Klimagipfel“ enthalten
Strategievorschläge:
Tolerante Suche, Bewertung der Suche mit Score-Funktion
Query Rewrite (10g)
Query Relaxation (10g)
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Anwendungsfallgruppe 2:
„Google-ähnliche Dokumentensuche“
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
SELECT /*+ FIRST_ROWS(10) */ *
FROM musiktitel
WHERE CONTAINS(titel, ‘<query>‘
|| ‘<textquery lang=“GERMAN“ grammar=“CONTEXT“>‘
|| ‘ <progression>‘
|| ‘ <seq> kioto AND klimagipfel </seq>
|| ‘ <seq> ?kioto AND klimagipfel </seq>
|| ‘ <seq> kioto OR klimagipfel </seq>
|| ‘ </progression></textquery></query>‘)
AND ROWNUM <= 10;
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Administration Wartung, Tuning und…
ein Blick hinter die Kulissen
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
DR$TITLE_CTX$I
…
Was passiert im Hintergrund, wenn ein CONTEXT
Index angelegt wird?
CREATE INDEX title_ctx ON musictitles(title)
INDEXTYPE ctxsys.context;
Folgende Tabellen werden implizit angelegt:
DR$TITLE_CTX$N
…
DR$TITLE_CTX$K
…
DR$TITLE_CTX$R
…
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Tabelle DR$<indexname>$I
Ist eine Index-organisierte Tabelle
Mappt jedes Wort (Token) auf die Dokumentpositionen
Diese Information befindet sich im BLOB-Feld TOKEN_INFO
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Synchronisation
Der CONTEXT Index ist per Default asynchron
Manuelle Aktualisierung mit CTX_SYS.SYNC_INDEX
Seit 10g Synchronisierung des Index auch möglich
- per Schedule
- ON COMMIT (Fragmentierung!)
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Synchronisation
INSERTs und UPDATEs auf der Quelltabelle führen zu
Einträgen in einer PENDING-Queue
Queue
RowID
RowID
CONTEXT Index
…
…
Tabelle
…
…
Synchronize
Index
View CTX_USER_PENDING
INSERT,
UPDATE
Die nächste Synchronisation aktualisiert den Index ($I, $K) für
alle Dokumente in der Pending Queue und leert diese danach.
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Häufige Synchronisation führt zu Fragmentierung!
Beispiel 1: Häufige Synchronisation
1. Datensatz einfügen
2. Synchronisation
3. Datensatz einfügen
4. Synchronisation
2 Datensätze eingefügt => 6 Einträge in der $I-Tabelle
DR$TITLE_CTX$I
EINE <Doc1, Pos11>
KLEINE <Doc1, Pos12>
NACHTMUSIK <Doc1, Pos13>
Eine große Nachtmusik
Eine Kleine Nachtmusik
EINE <Doc2, Pos21>
GROSSE <Doc2, Pos22>
NACHTMUSIK <Doc2, Pos23>
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Häufige Synchronisation führt zu Fragmentierung!
Beispiel 2: Gebündelte Synchronisation
1. Datensatz einfügen
2. Datensatz einfügen
3. Synchronisation
2 Datensätze eingefügt => nur 4 Einträge in der $I-Tabelle
DR$TITLE_CTX$I
EINE <Doc1, Pos11>
<Doc2, Pos21>
KLEINE <Doc1, Pos12>
NACHTMUSIK <Doc1, Pos13>
<Doc2, Pos23>
GROSSE <Doc2, Pos22>
Eine große Nachtmusik
Eine Kleine Nachtmusik
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Was tun gegen Fragmentierung?
Mit Optimierung (CTX_DDL.OPTIMIZE_INDEX)
kann man den Index defragmentieren.
DR$TITEL_CTX$I
EINE <Doc1, Pos1>,
<Doc2, Pos21>
KLEINE <Doc1, Pos2>
NACHTMUSIK <Doc1, Pos3>,
<Doc2, Pos23>
GROSSE <Doc2, Pos22>
DR$TITEL_CTX$I
EINE <Doc1, Pos11>
KLEINE <Doc1, Pos12>
NACHTMUSIK <Doc1, Pos13>
EINE <Doc2, Pos21>
GROSSE <Doc2, Pos22>
NACHTMUSIK <Doc2, Pos23>
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Was tun gegen Fragmentierung?
Wie jeder B*Tree Index sollte ein Textindex von Zeit zu Zeit
komplett neu aufgebaut werden, wenn es viele Updates/ Deletes
der Basistabelle gegeben hat:
DROP und CREATE INDEX
REBUILD (11g: auch als Online Index Recreation)
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Was tun gegen Fragmentierung?
Seit 10g gibt es für den Index die Einstellung TRANSACTIONAL
Suchergebnisse werden dabei kombiniert:
Suche im
Textindex
On-the-Fly-Suche in den
Dokumenten der Pending Queue
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Ein Fazit
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Oracle Text Textsuche AdministrationSuchstrategien Ein Fazit
Ein Fazit
Oracle Text ist eine mächtige Technologie. Zahlreiche Packages
ermöglichen Wartung, Administration und Analyse von Indizes.
Mit jeder neuen DB Version kommen neue Features hinzu, z.B.
Transactional (10g), CDI (11g), User-defined Scoring (11g)
Einfache Textsuchen können sehr schnell erstellt werden
Im Gegensatz zu normalen Indizes erfordern Oracle Text Indizes
aber sehr viel mehr Betreuung!
Die Hauptherausforderung im Projekt besteht in der Entwicklung
einer effizienten Suchstrategie
Das Beste zum Schluss: Oracle Text ist in jeder Standard- und
Enterprise Edition enthalten und ohne Lizenzierung!
ORACLE Text – Eine Oracle Perle, DOAG Konferenz, Nürnberg, 2.12.2008
Fragen?
... und Antworten
Kontaktadresse:
Carsten Herder
OPITZ CONSULTING München GmbH
Telefon: 0176/ 81011836
E-Mail: [email protected]
Internet: www.opitz-consulting.de
Oracle Text Textsuche Suchstrategien Administration Ein Fazit