[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