Oracle Database · · 3 Min.

Oracle Text: CONTEXT-Index richtig betreiben

Volltextsuche mit CONTAINS ist schnell eingebunden. Wie aktuell Treffer sind, hängt jedoch auch vom gewählten Synchronisationsmodell ab.

Wenn Anwendungen Dokumente, Beschreibungen oder Notizen durchsuchen sollen, kann Oracle Text die Suche direkt in SQL integrieren. Ein CONTEXT-Index zerlegt den Text in durchsuchbare Einträge; CONTAINS filtert passende Zeilen und SCORE liefert einen Relevanzwert. Im Betrieb ist eine Frage entscheidend: Wann werden neue oder geänderte Datensätze in den Index übernommen?

Wichtig für die Fachseite: Datenbank-Commit und Suchbarkeit sind nur dann garantiert synchron, wenn das Synchronisationsmodell dies sicherstellt. Bei geplanten oder manuellen Syncs kann eine frisch gespeicherte Zeile vorübergehend noch nicht in der Volltextsuche erscheinen.

Index anlegen und Suchabfrage ausführen

Für längere Dokumente in einer Textspalte ist CONTEXT ein typischer Ausgangspunkt. Die folgende Abfrage liefert Titel und sortiert Treffer nach Relevanz:

CREATE INDEX docs_text_idx ON documents(body)
  INDEXTYPE IS CTXSYS.CONTEXT;

SELECT title, SCORE(1) AS relevance
FROM   documents
WHERE  CONTAINS(body, 'oracle AND database', 1) > 0
ORDER BY SCORE(1) DESC;

Damit Suchergebnisse gepflegt bleiben, müssen Änderungen am Basistabelleninhalt in den Textindex synchronisiert werden. Beim manuellen Modell stößt ein kontrollierter Job die Pflege beispielsweise mit CTX_DDL.SYNC_INDEX an:

BEGIN
  CTX_DDL.SYNC_INDEX('DOCS_TEXT_IDX');
END;
/

Der Job sollte zum Datenvolumen und erwarteten Such-Latenzfenster passen. Planen Sie Laufzeit, Ressourcenbedarf und Fehlerüberwachung ein, statt den Aufruf unkontrolliert in jede Benutzersitzung zu legen.

Aktualität gegen Schreibpfad abwägen

Bei SYNC (ON COMMIT) wird der Textindex direkt nach dem Commit synchronisiert; der Commit wartet, bis die Synchronisierung beendet ist. Das kann eine sehr aktuelle Suche ermöglichen, koppelt aber zusätzliche Indexarbeit an den Schreibpfad. Bei hoher Schreiblast kann das die Antwortzeit von Transaktionen beeinflussen. Testen Sie deshalb nicht nur die Suchlatenz, sondern auch Commit-Zeiten unter realistischer Parallelität.

Eine zeitgesteuerte Synchronisierung mit kurzem Intervall ist oft ein sinnvoller Mittelweg, wenn wenige Sekunden Verzögerung fachlich akzeptabel sind. Bei manueller Synchronisierung bestimmen Sie den Zeitpunkt selbst, müssen aber sicherstellen, dass der Job regelmäßig läuft und ein Rückstand sichtbar wird. Die geeignete Wahl richtet sich nach dem Versprechen der Anwendung: „sofort auffindbar“ ist eine andere Anforderung als „innerhalb einer Minute im Suchindex“.

Betriebscheckliste für produktive Suche

  1. Maximal akzeptable Verzögerung zwischen Commit und Suchtreffer gemeinsam mit der Fachseite festlegen.
  2. Sync-Modus bewusst konfigurieren und Job-Eigentümer, Privilegien sowie Zeitplan dokumentieren.
  3. Schreiblast und Suchlast gleichzeitig testen; Commit-Latenz und Suchaktualität messen.
  4. Pending-Änderungen, Indexfehler und fehlgeschlagene Hintergrundläufe überwachen.
  5. Initialen Indexaufbau, größere Nachladungen und Wiederanlauf nach Wartung im Runbook beschreiben.

Fazit

Oracle Text macht Volltextsuche zu einem Bestandteil der relationalen Datenbankabfrage. Für verlässliche Ergebnisse genügt der Index allein nicht: Das Team muss Aktualitätsziel und Synchronisationskosten bewusst austarieren. Ein gemessenes Latenzversprechen, überwachte Sync-Läufe und ein getesteter Wiederanlauf halten Suche und Datenbestand dauerhaft zusammen.

Weiterführend: Oracles Referenzen zu Oracle-Text-Indizes, zum SYNC_INDEX-Aufruf und zum CONTAINS-Operator.