OmniFind ist eine Plattform für die Suche in unstrukturierten Texten innerhalb oder außerhalb der DB2 in Dokumenten im integrierten File-System, in Spoolfiles und in Source Physical Files. Mit OmniFind kann danach gesucht werden, ob bestimmte Suchausdrücke in einem Text vorhanden sind und welche Relevanz die Begriffe in den Texten haben.

OmniFind nutzt die SQL-Funktionen CONTAINS und SCORE. Mit CONTAINS wird der Suchausdruck definiert, während die Funktion SCORE die Wertigkeit ermittelt, wie oft der Suchausdruck in den zu durchsuchenden Daten vorkommt. Damit können folgende Anwendungen realisiert werden:

  • Suche in Programmsourcen,
  • Suche in Spoolfiles,
  • Suche in DB2- und IFS-Daten, die miteinander in Verbindung stehen, z. B. Personaldaten mit Lebensläufen, Kundendaten mit Besuchsberichten und Artikeldaten mit QS-Daten,
  • Suche in Dokumenten im integrierten File-System,
  • Suche in XML-Daten,
  • Suche in Textfeldern der DB2-Datenbank.

Der Suchausdruck wird mit CONTAINS definiert. Die Suche kann interaktiv oder mit embedded SQL durchgeführt werden. Vorteile der Suche mit OmniFind sind:

  • Die Suche mit OmniFind ist durch spezielle Indizes sehr schnell.
  • Groß- und Kleinschreibung spielen keine Rolle.
  • Umlaute spielen keine Rolle, z. B. die Suche nach „Müller“ findet auch „Mueller“.
  • OmniFind kann mit Wildcards suchen, z. B. Wasser* findet alle Begriffe, die mit „Wasser“ beginnen.
  • Es kann nach Synonymen gesucht werden, z. B. die Suche nach „Auto“ findet auch „Volvo“.
  • OmniFind kommt mit vielen verschiedenen Datenformaten zurecht: Text, PDF, BLOB, CLOB, XML usw.
  • OmniFind arbeitet mit einfachen Verknüpfungen: AND, OR, NOT sowie
  • OmniFind ist kostenlos für die IBM i.

Ein Beispiel für einen Suchausdruck mit OmniFind sieht wie folgt aus:

Select * from Artikel
where contains(Text,‘wasserdicht AND luftdurchlässig – gelb‘) = 1
  and Produktgruppe = 50
order by score(Text,‘wasserdicht‘);

Es werden mit diesem Statement alle Artikel gesucht, die wasserdicht, luftdurchlässig und nicht gelb sind, sowie der Produktgruppe 50 angehören. Die Sortierung erfolgt nach der Relevanz des Begriffs „wasserdicht“.

Ein Beispiel für die OmniFind-Suche mit embedded SQL lautet wie folgt:

Dcl-s suchausdruck varchar(100);
EXEC SQL DECLARE C1 CURSOR FOR
  Select Id, Bezeichnung from artikel
  where contains(Text, :suchausdruck) = 1 and Produktgruppe = 50;
EXEC SQL SET :suchausdruck = ‘wasserdicht NOT gelb‘;
EXEC SQL OPEN C1;
dou SQLCOD = 0;
  if SQLCOD = 0;
    EXEC SQL Fetch C1 into :Id, :Bezeichnung;
  endif;
enddo;
EXEC SQL CLOSE C1;

Installation

Der OmniFind Text Search Server entspricht dem kostenlosen Lizenzprogramm 5733OMF, das über den Electronic Software Service heruntergeladen und über das Menü LICPGM installiert werden kann. Weitere Informationen sind im Handbuch enthalten.

OmniFind Starten und Stoppen

Das Starten und Stoppen des OmniFind Text Search Server geschieht in der SQL-Umgebung mit den Befehlen:

  • CALL SYSPROC.SYSTS_START und
  • CALL SYSPROC.SYSTS_STOP.

Während der Installation wird standardmäßig ein Text Search Server eingerichtet. Es besteht die Möglichkeit, mehrere Text Search Server einzurichten und separat zu starten oder zu stoppen. Die Einträge befinden sich in der Tabelle QSYS2.SYSTEXTSERVERS.

Der OmniFind-Textsuchindex

OmniFind verwendet für die Indizierung der Daten einen eigenen Textsuchindex. Die Verwaltung des Textsuchindexes wird mit folgenden Befehlen durchgeführt:

  • CALL SYSPROC.SYSTS_CREATE – Erstellt einen Textsuchindex. Gleichzeitig werden drei Trigger für Einfügen, Ändern und Löschen der Daten für den Textsuchindex erstellt. Bitte beachten Sie, dass nach dem CREATE noch keine Daten im Index enthalten sind. Dem CREATE-Befehl können mehrere Parameter mitgegeben werden, z. B. die Frequenz in Zeiteinheiten (Std./Min.), wie oft der Index aktualisiert werden soll.
  • CALL SYSPROC.SYSTS_UPDATE – Wenn der Index leer ist, wird er mit Daten befüllt. Wenn bereits Daten im Index vorhanden sind, wird der Index aktualisiert.
  • CALL SYSPROC.SYSTS_DROP – Löschen des Textsuchindexes. Damit werden der Index und die drei Trigger gelöscht.

Unterstützte Datentypen des Textsuchindexes

OmniFind unterstützt eine ganze Reihe von Datentypen, mit denen ein Textsuchindex aufgebaut werden kann. Dabei können die folgenden Datentypen innerhalb der DB2-Tabellen Verwendung finden:

  • CHAR
  • VARCHAR
  • CLOB
  • BLOB
  • DBCLOB
  • GRAPHIC
  • VARGRAPHIC
  • BINARY
  • VARBINARY und
  • XML

Als Datentypen außerhalb der DB2-Tabellen sind zugelassen:

  • Spoolfiles
  • TEXT: Unstrukturierter Text
  • HTML: Hypertext Markup Language
  • XML: Extensible Markup Language
  • INSO: Der OmniFind Text Search Server für DB2 for i verwendet Filter, um das Format von Textdokumenten festzustellen. Die folgenden INSO-Dokumentformate werden unterstützt: XML, HTML, JustSystems Ichitaro, Lotus 123, Lotus Freelance, Lotus WordPro, Microsoft Excel, Microsoft PowerPoint, Microsoft Rich Text Format, Microsoft Visio, Microsoft Word, Microsoft Write, Portable Document Format (PDF),Quattro Pro, Rich Text RTF, StarOffice Calc und OpenOffice Calc.

OmniFind-Verwaltungs-Tools

Quelle: Rainer Ross

Bild 2.

Zur Verwaltung des OmniFind Text Search Server wie auch der Textsuchindizes sind drei Möglichkeiten vorgesehen:

  • direkte Eingabe der OmniFind-Befehle in der SQL-Umgebung,
  • mit dem System-i-Navigator (Screenshot dazu: siehe Bild 1) und
  • mit dem IBM Navigator for i (Screenshot dazu: siehe Bild 2).

OmniFind-Suchoperatoren

Für die Funktionen CONTAINS und SCORE können die Suchoperatoren verwendet werden, die in der Tabelle 1 zusammengestellt sind.

Quelle: Rainer Ross

Tabelle 1.

Suche mit Synonymen

OmniFind bietet die Möglichkeit, Texte mit Synonymen zu durchsuchen. Im nachfolgenden Beispiel wird genau erklärt, wie das funktioniert: Ein Kunde sucht in einem Webshop eine Jacke mit der Eigenschaft „regenfest“. In der Artikelbeschreibung ist die Eigenschaft „wasserdicht“ angegeben. Der Kunde findet keine Artikel, und das Geschäft kommt nicht zustande. In diesem Fall ist die Synonymsuche genau das Richtige.

Da diese Synoyme firmenspezifisch sind, hat OmniFind die Möglichkeit geschaffen, diese im XML-Format selbst zu definieren und dem Textsuchindex hinzuzufügen. Damit OmniFind weiß, dass nach Synonymen gesucht wird, gibt es eine Option zum Befehl CONTAINS: SYNONYM=ON.

Der Befehl sieht wie folgt aus:

Select * from Tabelle
where (text,‘regenfest‘,‘SYNONYM=ON’) = 1;

Bei diesem Suchbeispiel mit der Synonym-Option kommt die folgende, vierstufige Vorgehensweise zum Einsatz:

1. In einem Datenbankfeld befindet sich folgender Text:

Jemand musste Josef K. verleumdet haben, denn ohne dass er etwas Böses getan hätte, wurde er eines Morgens verhaftet, als er mit dem Maserati zur Arbeit fuhr …

2. Die Suche soll einen Treffer landen, wenn mit folgendem Begriff gesucht wird:

„mit dem Auto zur Firma fuhr“

3. Definition der Synonyme. Diese müssen OmniFind im XML-Format zur Verfügung gestellt werden:

<?xml version=“1.0″ encoding=“UTF-8″?>
<synonymgroups version=“1.0″>
<synonymgroup>
<synonym>Auto</synonym>
<synonym>PKW</synonym>
<synonym>Maserati</synonym>
</synonymgroup>
<synonymgroup>
<synonym>Arbeit</synonym>
<synonym>Arbeitsort</synonym>
<synonym>Firma</synonym>
</synonymgroup>
</synonymgroups>

Dabei hilft der folgende Tipp: Zum Erstellen der XML-Datei aus einer DB2-Tabelle gibt es die SQL-Funktionen XMLSERIALIZE, XMLGROUP und XMLDECLARATION.

4. Hinzufügen der Synonyme zum Textindex. Hier gibt es zwei Möglichkeiten: entweder mit dem IBM Navigator for i oder mit dem Import-Tool, das über die Qshell aufgerufen werden kann. Die Beschreibung befindet sich im Hand buch „OmniFind Text Search Server für DB2 for i“.

Rainer Ross