4D Write Pro – Volltext-Indexierung

„Ich will alle Dokumente finden, in denen vom Tango die Rede ist! Ich brauche sie schnell! Kann ich das machen?“

Ok, aber erst einmal durchatmen!

Für die Stichwortsuche in 4D Write Pro Dokumenten muss lediglich ein neues Indizierungsattribut in jedem Dokument hinzugefügt werden. Dies geschieht nicht standardmäßig, da diese Art der Suche nicht oft erforderlich ist und es keinen Sinn machen würde, die Größe der Dokumente systematisch zu erhöhen. Wenn sie jedoch benötigt wird, ist diese Art von Index sehr einfach zu erstellen.

„Tango ist ein traditioneller argentinischer Tanz“. Unser Ziel ist es, eine Liste von Wörtern aus dem Inhalt der Dokumente zu erstellen. Dies geschieht hauptsächlich mit zwei Befehlen:

  • WP Get text – gibt den Rohtext des Dokuments zurück
  • Get text keywords – füllt ein Text-Array mit den Wörtern aus dem gelieferten Text. Sobald dieses Array gefüllt ist, fügen Sie es einfach als Attribut des 4D Write Pro Dokumentobjekts hinzu und verwenden es als Ziel für die Stichwortsuche.

Schauen wir uns die Details genauer an.

Verpassen Sie nichts inSIDE the document

WP Get text gibt den Inhalt des Ziels als reinen Text zurück. Das Ziel kann ein bestimmter Bereich oder ein ganzes Dokument sein. Wenn Sie ein Dokument als Argument übergeben, wird nur der Text im Textkörper des Dokuments zurückgegeben. Kopf- und Fußzeilen werden ignoriert, was wahrscheinlich nicht erwünscht ist. Da jeder Abschnitt eines Dokuments seine eigenen Kopf- und Fußzeilen haben kann, müssen Sie diese in einer Schleife durchlaufen und deren Inhalt lesen. Achten Sie darauf, alle Varianten zu berücksichtigen (z. B. erste Seite, rechte Seite, linke Seite).

Einfügen des Textes in ein ARRAY

Get text keywords füllt ein Array auf der Grundlage des Inhalts des Ausgangstextes. Die einzige Feinheit hierbei ist, dass man den optionalen Parameter Stern (*) nicht vergessen darf. Er ermöglicht es Ihnen, das Array nur mit Werten zu füllen, die sich von den Wörtern im Text unterscheiden. Das vermeidet unnötiges „Gewicht“ 🙂

Erstellen Sie den Index im Dokument

Der Name des Attributs, das den Index enthalten soll, bleibt Ihnen überlassen. Es wird jedoch dringend empfohlen, ihm einen Unterstrich voranzustellen, um mögliche Konflikte mit bestehenden (oder zukünftigen) öffentlichen Attributen von 4D Write Pro Dokumenten zu vermeiden (Beispiel: „_keywords“.)

Natürlich muss diese Indizierung jedes Mal durchgeführt werden, wenn Dokumente geändert werden, aber dies ist eine wirklich sehr schnelle Aufgabe und wird keine spürbare Verlangsamung für die Benutzer verursachen.

Indexieren Sie den Index!

Damit die Abfragen mit dem Schlüsselwortindex schnell und effizient sind, muss natürlich auch das Dokument selbst indexiert werden. Über die Größe des Indexes brauchen Sie sich keine Gedanken zu machen. Es werden nur exponierte (öffentliche) Attribute indiziert, so dass nur eine sehr geringe Übergröße zu erwarten ist. Es besteht zum Beispiel keine Notwendigkeit, ein neues Objektfeld zu erstellen, das nur diesem Zweck dient. Dies wäre völlig nutzlos und würde mehr Platz beanspruchen als die Verwendung eines vorhandenen Objekts (z. B. des 4D Write Pro Dokuments selbst).

Im Falle von Objektfeldern bedeutet „Automatisch“ „Cluster B-Tree“, was für Geschäftsbriefe oder ähnliche Dokumente ideal ist.

Abfragen über diesen Index durchführen

Klassische Abfragen müssen „nach Attribut“ durchgeführt werden. Beachten Sie, dass das Attribut eine Sammlung ist. Sie müssen also öffnende und schließende Klammern [ ] hinzufügen, um 4D mitzuteilen, dass die Suche innerhalb dieser Sammlung erfolgen muss. Zum Beispiel:

QUERY BY ATTRIBUTE([SAMPLE]; [SAMPLE]WP; "_keywords[]"; =; $val)

ORDA-Abfragen werden nach demselben Prinzip durchgeführt:

$entitySel:=ds.SAMPLE.query("WP._Schlüsselwörter[] = :1"; $val)

Schlussfolgerung

Wenn in Ihren Dokumenten diese Art der Indizierung nicht von Anfang an vorgesehen war und sich die Notwendigkeit ergibt, ist es nie zu spät! Apply to selection der Indizierungsmethode wird die Aufgabe perfekt erfüllen. Die Suchvorgänge können auch kombiniert werden, um mehrere Wörter auf einmal (alle Wörter) oder einzeln (mindestens eines der Wörter) zu berücksichtigen. Auf diese Weise können Sie (und vor allem die Benutzer Ihrer Datenbanken) Texte sehr schnell anhand der darin enthaltenen Wörter finden.

Jetzt haben Sie zwei Methoden, um den Volltextindex zu erstellen (und eventuell zu entfernen)! Sie können ab 4D V17 verwendet werden. Sehen Sie sich dieses Code-Snippet an, das Sie in Ihrer eigenen Anwendung verwenden können!

Roland Lannuzel
- Product Owner & 4D Experte - Nach seinem Studium der Elektronik arbeitete Roland als Entwickler und Berater in der industriellen IT-Branche, wo er Lösungen für Kunden mit einer Vielzahl von Datenbanken und Technologien entwickelte. In den späten 80er Jahren verliebte er sich in 4D und setzte es bei der Entwicklung von Geschäftsanwendungen wie Buchhaltungs-, Abrechnungs- und E-Mail-Systemen ein. 1997 trat er schließlich in das Unternehmen ein und leistete einen wertvollen Beitrag, indem er Spezifikationen, Testtools und Demos entwarf, Schulungen durchführte und auf vielen Konferenzen für die 4D Community sprach. Er gestaltet die Zukunft von 4D aktiv mit, indem er neue Funktionen und Datenbankentwicklungstools definiert.