[Allegro] Vb.320: Alles zu "Volltextsuche" (srch, acon, a35); RegEx kurz und knapp
Bernhard Eversberg
b-eversberg at gmx.de
Di Apr 14 10:14:20 CEST 2020
Verlautbarung 320 zur allegro-Entwicklung 2020-04-14
-----------------------------------------
V40.2 liegt auf allegro-b/download bereit
srch.gz und acon.gz für Linux auf allegro-b/download
Neues Paket a35 in den nächsten Tagen
INHALT
I. Allgemeines
II. Volltextsuche mit acon, srch, a35
III. "Reguläre Ausdrücke" bei Volltextsuche - Kurze Einführung
IV. HINWEISE
I. Allgemeines
--------------
Außenstehende sind oft erstaunt, wenn sie diese 2 Dinge hören:
1. "allegro" ist kein Bibliotheksprogramm, es ist ein Datenbanksystem.
Quasi nebenbei kann es auch Bibliotheksarbeit machen: dazu braucht's
nur eine passende Konfigurierung. Die ist schon mit drin im Gesamtpaket.
2. "allegro" ist nicht ein einzelnes, großes Programm für alle Aufgaben,
sondern es gibt mehrere Programme für unterschiedliche Arten von
Arbeiten.
Wer nur Bibliotheksarbeit machen will, braucht das alles nicht so genau
zu wissen - aber nützlich ist es schon. Mehr dazu steht in der aktuellen
"Fortbildung 2019" :
http://www.allegro-b.de/download/doku/Fortbildung2019.htm
Ein Programm namens allegro(.exe) gibt es gar nicht.
Die DREI WICHTIGSTEN PROGRAMME im System sind:
a99.exe : Das Windows-Hauptprogramm mit graphischer Oberfläche.
Dieses Programm ist mit externen Skripten erweiterbar:
Es kann Skripte ausführen, geschrieben in der FLEX-Sprache.
Dadurch sind fast alle wichtigen Aufgaben flexibel, d.h. leicht
zu ändern und zu erweitern ohne Eingriffe in die C-Programme.
(Diese Idee steckt übrigens auch in FOLIO: die Skripte werden dort
!Apps" genannt und können in verschiedenen Sprachen verfasst sein.)
Im Ordner "flex" liegen 325 solche Skripte für Aufgaben aller Art.
acon.exe (Windows) bzw. acon (Linux) : Das separate Konsolprogramm
zur Ausführung von Skripten (geschrieben in der FLEX-Sprache)
Dies ist sehr wichtig für alle Web-Oberflächen, z.B. a35 und PHPAC.
In a35 stecken hinter fast allen Funktionen FLEX-Skripte, d.h. für
Änderungen und Erweiterungen braucht man sich nur selten mit PHP-
oder JavaScript herumzuschlagen.
srch.exe (Windows) bzw. srch (linux) : für Volltextsuche und Export
Als Konsolprogramm nutzbar oder in .bat-Dateien(Win) bzw. .sh (Linux)
Es kann mit "regulären Ausdrücken" suchen, das ist ein allgemein
übliches Konzept der Informatik für Suchprogramme. Eine ganz kurze
Einführung siehe unten im Anhang. Für die Datenausgabe kann es
jede Export-Parameterdatei nutzen. [Handbuch Kap. 4., 5. und 10.)
Der Standard-Anwender arbeitet mit a99 und merkt gar nichts von den
anderen Programmen, weil sie von a99 bei Bedarf automatisch verwendet
werden. Vor allem Systemverwalter können von solchem Wissen profitieren.
II- Volltextsuche mit acon, srch(.exe), a35
-------------------------------------------
Hinw.: Im Programm srch(.exe) wurden interne Verbesserungen vorgenmmen.
A. In der Vb319 vom 3.3.2020 wurden zwei neue Jobs vorgestellt:
srch.job : gehört in das ProgDir, also wo acon(.exe) liegt
Per Konsole mit acon direkt im ProgDir zu starten, also z.B.
acon -jsrch -ka -ddemo2\cat*.ald -r"shakespeare + language"
Dieser Job hat nichts zu tun mit a35, dafür gibt es:
a35srch.job : eine Variante, die in den Ordner ../scripts/jobs für a35 gehört.
Wird in der Web-Anwendung a35 gestartet, im Menü unter
"Suchen / Volltextsuche + Extras" (braucht Login)
Beide Varianten werden komplett von acon ausgeführt, das erste direkt von
der Konsole gestartet, das zweite via ajax4.php aus a35.
(Schon etwas älter ist ftr.job (mit englischem Kommentar), der jetzt
nicht mehr zum Paket gehört.)
Das Programm srch(.exe)
kommt dagegen in a35fts.job zum Einsatz (das kann irritieren), siehe B.
Größtenteils sind sie identisch, ausführlich kommentiert ist nur srch.job.
Diese Jobs können NICHT NUR suchen und exportieren (mit Option -e), sondern
sie sind ERWEITERBAR um eigene FLEX-Funktionen zum beliebigen Bearbeiten
der gefundenen Daten. Solche Funktionen fügt man ein zwischen die Sprungmarken
:ONE und TWO. Man erstellt sich also z.B. eine Kopie mysrch.job von srch.job
und baut zwischen :ONE und :TWO beliebig viele FLEX-Befehle ein, die mit
jedem gefundenen Satz dann eigene Aktionen erledigen. Vor allem sind dabei
beliebige Änderungen an den Datensätzen möglich einschl. Abspeichern der
geänderten Sätze, mit oder ohne zusätzlichen Export. Dadurch werden diese
beiden .jobs zu universellen Werkzeugen der Datenbearbeitung für den
versierten FLEXologen.
B. Volltextsuche mit a35fts.job, "fts = full-text search" (mit Export)
a35fts.job : im Menü "Suchen / Volltextsuche schnell"
Darin benutzt acon das Programm srch(.exe) für Suche und Export.
Dieses bietet nicht die Möglichkeit, eigene Aktionen einzubauen und die
Sätze dann wieder zu speichern.
Der Vorteil gegenüber A. ist die Geschwindigkeit: srch kann erheblich
schneller die gesamte Datenbank durcharbeiten als acon mit (a35)srch.job.
Mitdenker könnten fragen:
Warum wurde nicht hierfür der Name "a35srch" gewählt statt umgekehrt bei A.?
Nicht ohne Grund: So kann man von dem acon-Aufruf "acon -jsrch ..." einfach
vorn "acon -j" wegnehmen (s.o. unter A.) und hat dann den srch-Aufruf, der
dasselbe Ergebnis liefert, nur schneller.
[a35fts.job entstand außerdem früher, und eine Umbenennung von solchen
Dateien ist immer mißlich.]
Übersicht der Dateien, ihrer Funktionen und wo sie zu liegen haben
Zum besseren Verständnis mal aufrufen: http://www.allegro-b.de/db/demo
WD = Web Directory, z.B. /var/html oder /var/www
ProgDir = c:\allegro (Windows) bzw. /var/allegro (Linux)
DbDir = z.B. c:\allegro\katalog bzw. /var/allegro/db
Datei/Prog. Funktion Ort Aufruf aus
---------------------------------------------------------------------------
acon(.exe) Jobs ausführen ProgDir WD/db/ajax4.php
srch(.exe) Volltextsuche+Exp. ProgDir WD/db/scripts/jobs/a35fts.job
a35fts.job srch(.exe) nutzen db/scripts/jobs WD/db/a35fts.htm
a35fts.htm Startmenü f.a35fts db WD/db/a35-pc-menu.php
a35srch.job Vollt.Suche+Extras db/scripts/jobs WD/db/a35srch.htm
a35srch.htm Startmenü f.a35srch db WD/db/a35-pc-menu.php
fts. at pr Satznr. ausgeben ProgDir srch, Start in a35fts.job
ftr. at pr Umcodierung->UTF-8 ProgDir *.job
s1.asp A->a, ä->ae usw. DbDir, ProgDir srch(.exe)
Für ASCII. Es gibt auch Versionen für ANSI und UTF-8
Exportparameter für Ergebnislisten (in externen Fenstern - leicht zu kopieren
erweiterbares Angebot, Auswahl anzubieten in :
htms. at pr Export Kurzliste ProgDir/DbDir a35fts.htm / a35srch.htm
a35ext.apr Export Kurzliste ProgDir/DbDir a35fts.htm / a35srch.htm
e-htm. at pr Export Internformat ProgDir
Diese Dateien werden z.B. in a35fts.job geladen zum Exportieren
III. "Reguläre Ausdrücke" bei Volltextsuche - Kurze Einführung
--------------------------------------------------------------
Diese Regeln gelten für die Programme
* a99 : der FLEX-Befehl srx (verwendet den vorher in #u!! deponierten
Suchbegriff, um in dem Text zu suchen, der in der iV steht
* srch(.exe) : der mit Option -r angegebene Suchbegriff kann auch so
aussehen: -r?xyz mit einem Dateinamen xyz. In dieser
Datei muss dann der Suchbegriff stehen, die Datei muss
im DbDir liegen. Das Programm liest die Datei und löscht sie.
Dieses Verfahren nutzt der a35fts.job
Ein "wort" ist jede Zeichenfolge ohne Leerzeichen
Ein "komplexer Suchbegriff" besteht aus worten, getrennt durch Operatoren
Es gibt 5 Arten von Suchbegriffen:
Einfache Suchbegriffe:
----------------------
1. Nur 1 Wort wird gesucht:
wort (einzelnes Wort, also ohne Leerzeichen)
Klein- und Großschreibung sind gleichwertig
Diakritika werden automatisch "aufgelöst": z.B: ä -> ae und é -> e
2. Einzelne oder mehrere Zeichen innerhalb eines "Wortes" maskieren
z.B. mit Punkt: m.ller findet Müller / Möller / Miller
oder .* maskiert eine variable Anzahl von Zeichen:
wort1.*wort2
findet wort1 und wort2 im selben feld, mit beliebigen Zeichen dazwischen
Also: Ein . maskiert 1 Zeichen, .* maskiert mehrere, egal welche es sind
wort1 kann auch eine Kategorienummer #nnn sein, wort2 dann in #nnn gesucht
Wichtig: Mit #3.*xyz wird xyz in allen Feldern der Gruppe #3 gesucht
Komplexe Suchbegriffe: [3 - 5 sind allegro-spezifisch, nicht RegEx-Standard]
----------------------
3. Größer-Kleiner-Suche mit den Operatoren < und >
#nnn>zahl die erste Zahl in #nnn ist größer / kleiner als zahl
#nnn<zahl
Das Programm vergleicht nur die erste Zahl, die in #nnn vorkommt!
Man kann z.B. schreiben #nnn...>zahl, wenn der Inhalt von #nnn mit
3 Ziffern anfängt, und die zahl dann irgendwo dahinter kommt
wort1 und wort2 bei Typ 2. können auch solche Ausdrücke sein
4. Numerische Gleichheit
#nnn=zahl die erste Zahl immm Text von #nnn wird mit zahl verglichen
(Keine Leerzeichen vor und hinter = )
5. Boole-Ausdrücke : Ausdrücke der Typen 1-4 getrennt durch Operatoren + / -
jeweils Leerzeichen links und rechts des Operators
ausd1 + ausd2 UND
ausd1 / ausd2 ODER
ausd1 - ausd2 NICHT
Ausdrücke werden jeweils im gesamten Satz gesucht, d.h. ausd1 und ausd2
müssen nicht im selben Datenfeld stehen.
Die Reihenfolge bei + und / ist egal.
Es kann mehr als zwei Ausdrücke mit Operatoren dazwischen geben.
Eine solche Sequenz wird von links nach rechts abgearbeitet.
Eine Klammerung ist nicht möglich.
6. Sonderfälle
^abc Zeichenfolge abc wird gefunden, wenn ein Feld damit beginnt
(betrifft Feldinhalt, also was hinter #nnn steht)
xyz$ Zeichenfolge xyz wird gefunden, wenn ein Feld damit endet
IV. HINWEISE
------------
1. Konsolidiertes Format (a-Format) - Hier liegt die Doku:
http://www.allegro-b.de/download/doku/form2016/
2. al.job (Konsoljob für den Admin, bes. unter Linux)
Die Funktion e = Exchange rates im Menü a = admin ging nicht mehr.
Das wurde behoben. [s. Vb292]
Abzuholen mit X gf al.job
Oder direkt: http://www.allegro-b/files/job/al.job
Mehr Informationen über die Mailingliste Allegro