[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.102

    Omnifind Problem

    Hallo,
    ich habe auf unserem Testsystem etwas mit Omnifind herumprobiert. Sieht alles sehr gut. Vielen Dank an Rainer Ross für seine prägnante Einleitung, die er hier mal zur Verfügung gestellt hat.

    Nur hat sich durch diverse Tests und ggf. Abbrüche meinerseits anscheinend igendetwas verklemmt. Einer meiner Text-Such-Indizes macht Probleme: Ich kann den Index zwar verwenden, aber nicht aktualisieren oder löschen. Ich bekomme beim Aktualisieren immer folgende Meldung:
    MSG ID WTK SATZ TEXT
    SQ20426 30 1 Position 1 Kollidierende Verwaltungsprozedur für
    Textsuche bereits aktiv.

    Ich habe den Server bereits gestoppt und wieder gestartet. Hat aber keinen Effekt. Hat jemand noch eine Idee? Sonst müssen wir nachher mal einen IPL machen. Aber irgendwie beunruhigt mich so etwas. Auf der Echtmaschine möchte ich so ein Verhalten nicht haben.

    Dieter

  2. #2
    Registriert seit
    Aug 2014
    Beiträge
    179
    Hallo Dieter,
    ich habe Omnifind seit 4 Jahren im Einsatz und es läuft ohne Probleme. In diesem Fall würde ich ein Problem bei der IBM aufmachen.

    Viele Grüße
    Rainer

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Ok, danke. Ich spreche mal mit unserem Systemadministrator.

  4. #4
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Noch eine Frage, Rainer:
    Wenn ich in einer Tabelle mehrere Felder habe, nach denen ich schnell suchen will, also z.B. name, vorname, strasse und ort.
    Dann würde ich doch 4 Textindizes erstellen. Einen für name, einen für vorname, einen für ort und einen für strasse, oder?
    Und suchen würde ich in etwa so:
    Code:
     select key from adresse
    where contains(name,'*schröder*', 'QUERYLANGUAGE=de_DE') = 1
    and contains(vorname,'*dieter*', 'QUERYLANGUAGE=de_DE') = 1;
    Oder kann man auch einen Index über mehrere Felder aufbauen und wenn ja, macht das Sinn?

  5. #5
    Registriert seit
    Aug 2014
    Beiträge
    179
    Hallo Dieter,

    ein Textindex kann nur über ein Feld aufgebaut werden und macht Sinn, wenn es sich
    - um viel und unstrukturierten Text handelt oder der Text in einem CLOB Feld in der Datenbank vorhanden ist
    - der Text im IFS als Excel, Word oder PDF vorhanden ist
    - Groß- und Kleinschreibung keine Rolle spielen soll:
    contains(name, 'schröder') findet Schröder, schröder, Schroeder und schroeder
    - Umlaute und ß keine Rolle spielen sollen
    - mit Synonymen gearbeitet werden soll: contains(name, 'auto') soll Audi, Fiat oder Renault finden
    - der Rank eines Begriffes in Texten ermittelt werden soll, das geht mit SCORE

    Der Textindex hat als weiteren Vorteil, dass er weniger Plattenplatz benötigt als eine logische Datei oder ein Index der über das Textfeld erstellt wird

    in Deinem Beispiel könnte man das gleiche Ergebnis auch mit einer Like-Anweisung erzielen.

    Für die normale Suche ist keine Wildcard '*' erforderlich:
    Code:
    select key from adresse
    where contains(name, 'schröder') = 1 and contains(vorname, 'dieter') = 1;
    Omnifind-Statements und normale Statements können auch kombiniert werden

    Code:
    select key from adresse
    where contains(name, 'schröder') = 1 and contains(vorname, 'dieter') = 1
      and land = 'DE';
    einen guten Einstieg findest Du hier:
    https://www.gateway400.org/documents...w_expanded.pdf
    http://ibmsystemsmag.com/ibmi/admini...rch-technique/

  6. #6
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Vielen Dank Rainer,
    deine Erklärungen helfen mir sehr weiter. Bei uns habe ich Momentan nur das Problem, "normale" Unicode Character Felder zu durchsuchen. Ich muss keine Blobs oder Clobs durchsuchen. Natürlich geht das mit Like. Aber Like ist viel zu langsam. Bei Like wird ja zwangsläufig ein kompletter Tablescan durchgeführt. Ich möchte Omnifind einsetzen, um ein "superschnelles Like" zu implementieren. Die anderen Vorteile wie z.B. Synonymsuche sind noch ein zusätzliches Sahnehäubchen, aber nicht so entscheidend.

    Ich war angenehm überrascht, wie einfach man Omnifind benutzen kann. Mit deiner Anleitung kann man ja in 10 Minuten verstehen, wie ein Index definiert und aktualisiert wird und wie man das in seiner SQL Suche nutzt.
    Ein wenig Sorgen macht mir die Stabilität. Beim Testen ist es mir gestern gelungen, den Textsuchserver in einen "Modus" zu bringen, in dem er eine Aktualisierung des Index immer abgelehnt hat mit dem Hinweis, da liefe bereits eine Verwaltungsoperation. Dazu noch eine Frage: Wir müssen die Aktualisierung des Index ja manuell antriggern. Kann ich das jederzeit machen? Was passiert, wenn ich eine Aktualisierung antriggere, während eine vorhergehende Aktualisierung noch nicht abgeschlossen ist? Oder kann man (per Programm) feststellen, ob gerade eine Aktualisierung läuft?

  7. #7
    Registriert seit
    Aug 2014
    Beiträge
    179
    Hallo Dieter,
    für ein superschnelles Like ist OmniFind ideal. Du kannst auch noch *keepinmem setzen, dann hast Du noch mehr Performance.

    Zur Stabilität kann ich nur sagen, dass es bei mir noch keine Probleme dieser Art gab. Ich muss aber sagen, dass ich Deinen Fall mit paralleler Indexaktualisierung noch nicht getestet habe. Hier würde ich ein Problem bei der IBM aufmachen. Bitte achte auch darauf, dass die PTF's den aktuellen Stand haben. Letztes PTF V7.2 ist SI65424.

    Für Aufbau und Aktualisierung des Index habe ich folgende Empfehlung:
    Wenn die Datei noch keinen Textindex hat einen Index erstellen

    Code:
    call sysproc.systs_create('lib','file','lib.file(feld)'
    'update frequency none
     update minimum 1    
    index configuration(ignoreemptydocs 1 , updateautocommit 0 )');
    Wenn in dieser Datei das indexierte Feld geändert, gelöscht oder eingefügt wird, dann z.B. mit einem Trigger den Index aktualisieren

    Code:
    call sysproc.systs_update('lib','file','using update minimum');
    Damit es nicht zu Konflikten mit paralleler Indexierung kommt, kannst Du den Indexupdate auch im Batch nacheinander ausführen lassen.

    Anbei ist eine Anwendung, die OmniFind bei der Textsuche benutzt. Mit Klick auf das ? werden die Möglichkeiten erklärt. Einfach in die Suchzeile z.B. Miles Davis eingeben. Bei Klick auf Info wird der indexierte Text angezeigt

    http://www.myhofi.com/musichtm/musicsearch.htm

    Bei folgender einfacher Anwendung habe ich Handbücher, die als PDF-Dokumente vorliegen, indiziert

    http://www.myhofi.com/devhtm/Documentsearch.htm

  8. #8
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Hallo Rainer,
    herzlichen Dank!

Similar Threads

  1. Omnifind, Anzahl der Indexspalten
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 16
    Letzter Beitrag: 20-10-14, 15:16
  2. QRY - Problem
    By Günter Majewski in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 07-01-03, 16:10
  3. SQL - Problem
    By Tommy in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 16-12-02, 17:43
  4. RPG Problem
    By Mädele in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 22-11-02, 18:06
  5. SQL Problem
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 03-06-02, 14:30

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •