Was ist Volltextsuche?
Mit der Volltextsuche können Sie die gesamte Datenbank durchsuchen lassen, also alle Datenfelder, nach jeder beliebigen Zeichenfolge. 
Nur die Datensätze sind gemeint, nicht die Texte selbst, die in den Dokumenten stehen! Denn die sind als Textdateien nicht verfügbar und könnten in einer allegro-Datenbank ohnehin nicht gespeichert sein. 

Dieser Text erklärt, welche Suchmöglichkeiten es in der Volltextsuche gibt. 

Die Volltextsuche mit "Regulären Ausdrücken" 

Man sucht z.B. den Namen Meyer, es soll auch Meier, Maier oder Mayer gefunden werden, das zweite e könnte sogar fehlen. Die Methode der sog. Regulären Ausdrücke erlaubt es dann, das Suchwort so einzugeben: 
m[ae][iy]e*r 
und dann findet man alle Schreibweisen zusammen! Über das Menü "Finden / Volltextsuche" können Sie sofort mit dem Suchen anfangen (dahinter steckt fulltext.flx).

Zuerst aber ein paar einfache Beispiele zum Ausprobieren an der DemoBank. In grün sieht man, was jeweils einzugeben ist. Für die meisten Fälle findet man hier schon ein passendes Muster, ohne die `Regeln` genau zu kennen! 
 
0. Man sucht ein ganz normales Wort, sagen wir "Tragödie"
   tragoedie
   (Also immer Kleinschreibung eingeben, Umlaute und ß auflösen, dann wird jede Schreibweise gefunden)
 
1. Man will mal schauen, ob die exakte Zeichenfolge  "Oesterreich" vorkommt (also mit Oe statt Ö)
   _Oesterreich   (hinter dem _ die genaue gesuchte Schreibweise!)
 
2. Es wird "Atomphysik" oder "Kernphysik" gesucht
   atomphysik / kernphysik (es darf auch beides vorkommen)
   atomphysik %% kernphysik (nicht beide, aber eins von beiden)
     (Anderes Beispiel, das in DemoBank instruktiv ist:  goethe / shakesp  bzw.  goethe %% shakesp)
 
3. "Shakespeare" und "Drama" sollen auftreten, aber nicht "Hamlet"
   shakespeare + drama - hamlet
   (Man kann bis zu 100 Suchwörter verknüpfen, Klammerung ist aber (noch) nicht möglich.)
	SEHR wichtig: Vor und hinter +, - und / immer genau ein Spatium setzen. 

4. In welchen Sätzen kommt "Herzogtum" als Ordnungshilfe vor, im ganzen Satz bzw. im Feld #60
   <<herzogtum>>   bzw.  #60.*<<herzogtum>>
(<< statt < und >> statt >, weil diese Zeichen sonst eine Sonderwirkung haben:)
SEHR wichtig: Wo man  .*  angibt, können beliebig viele andere Zeichen stehen. 
Der Punkt allein besagt, daß an seiner Stelle irgendein beliebiges Zeichen stehen kann.

ACHTUNG: In allegro-Daten kann das Zeichen # auch als Textzeichen im Feldinhalt vorkommen, d.h. es könnte auch mal zufällig "#60" z.B. innerhalb eines Datenfelds #81 stehen. Wie man sich absichert, wenn man ausdrücklich z.B. #60 NUR als Feldnummer finden will, steht im `Anhang`.
 
5. Im Feld #76 soll eine Jahreszahl größer als 2000 stehen bzw. genau 2000
   #76 >2000   bzw.   #76 =2000
(Die Zahl braucht dabei nicht am Anfang von #76 zu stehen, z.B. kann sie auch in Klammern stehen. 
Es gibt kein >=, aber  >1999 bewirkt dasselbe, was >=2000 bewirken würde!)
 
6. Her mit den alten Sachen über Shakespeare, vor 1920 erschienen!
   #31.shakesp + #76 <1920
(Der . sagt: Shakespeare ist auch in #31p, #31s usw. zu suchen, nicht nur in #31
 
7. In einem der #81er Felder soll "Diss." vorkommen (auch "diss." möglich)
   _#81.*Diss\. / _#81.*diss\.
Hier bedeutet  .*  "beliebiger Zwischenraum" und \. findet den Punkt als solchen
 
8. Im Datensatz soll irgendetwas nicht vorkommen:  (s.a. 3.) 
   -#90       	Es soll kein Feld #90 vorhanden sein (auch nicht #90a etc.)
   #30 - #31 	ein #30er-Feld soll vorkommen, #31 (oder #31x) aber nicht (auch #30. - #31. würde gehen, aber ein Maskierungspunkt am Ende ist unnötig)
  _-#77.*S\. 	in keinem Feld #77 (also auch #77a etc.) soll die Zeichenfolge "S." auftreten 
    _#9DH - _#9DH.*²n	es soll ein Feld #9DH vorkommen, darin aber nicht das Unterfeld ²n
 
9. Im Unterfeld $p der Bestellkategorie #9DB soll ein Preis >20 EUR stehen
   _#9DB.*²p>20   
(Der _ ist nötig, damit exakt nach #9DB gesucht wird, nicht #9Db oder #9db) 
Achtung: Hier wie unter 8. statt ² den Querstrich / setzen, falls in den Indexparametern der Befehl  q .31 /  steht, wie es in den Standardparametern  cat.api  der Fall ist.

10. Und was bedeutet  m[ae][iy]e*r ? Sicher haben Sie es schon erraten:
Wo [ae] steht, kann entweder ein a oder ein e stehen, und 
	e* heißt: hier kann ein e stehen oder nichts (oder mehrere e)
 
11. Achtung bei V14! Wenn Sie bei der Normdatenersetzung die Standardkennung mit '_' benutzen, so werden vor der Suche die entsprechenden V14-Ersetzungen durchgeführt. Wenn Sie eine andere Kennung benutzen oder diese Ersetzung verhindern wollen, so müssen Sie in dem FLEX ftr.flx an der mit "if v14" beginnenden Zeile eingreifen: entweder das Zeichen entsprechend anpassen oder die Zeile ganz herauskommentieren. 
Hinweis: wenn Sie nach einer Zeichenfolge suchen wollen, die "_" als Zeichen enthält, wird die Suche dadurch erheblich beschleunigt!

Alle diese Beispiele ergeben sich aus den allgemeinen Regeln, die nachfolgend aufgelistet sind und noch manches mehr ermöglichen:

Allgemeine Regeln für Reguläre Ausdrücke
Die Punkte 2. und 3. sind allegro-spezifisch modifiziert, 1. gibt es im gängigen Standard nicht,  15. bis 17. auch nicht! 
Die Regeln lassen sich alle sinnvoll miteinander kombinieren.
Der gesamte Ausdruck darf bis zu 1000 Zeichen lang sein.
Angewendet wird ein Suchbefehl stets auf den momentanen Inhalt der "internen Variablen". 
Ausgeführt wird die Suche durch den neuen FLEX-Befehl srx. Der Normalanwender braucht dies nicht zu wissen, er benutzt einfach die Funktion "Volltextsuche" im Menü "Finden". Dahinter steckt der FLEX ftr.flx, und darin der Befehl srx. (Für den Experten gibt es einen FLEX grep.flx, der Textdateien durchsuchen kann, z.B. die "Verlautbarungen".)
 
 1. Unterstrich an erster Position: Exaktheit 
    _abc  bzw.  abc 
    Exakte bzw. umcodierte Suche 
    Setzt man einen _ vor den Suchbegriff, wird dieser exakt gesucht, 
    d.h. mit Eingabe von  _Müll  findet man nur Müll, nicht Muell oder
    muell oder müll.
    Im Normalfall, also ohne den _, wird der Datentext umcodiert, der Suchbegriff 
    selbst aber nicht! Man muß also  muell  eingeben, um Müll, Muell und
    muell und müll mit einer einzigen Suche zu finden.
    Man wird meistens umcodiert suchen wollen, deshalb fordert diese 
    Variante kein Steuerzeichen. Wichtig: Dann nur Kleinbuchstaben 
    ohne Akzente eingeben, Umlaute aufgelöst, ss statt ß!
    (Der _ hat nur in der ersten Position diese Wirkung, sonst ist er kein Steuerzeichen.) 
    Zur Umcodierung werden die p- oder q-Befehle in den Indexparametern
    verwendet, und zwar diejenigen, die A in a wandeln.
    Achtung: _ empfiehlt sich, wenn Sonderzeichen gesucht werden, die
             bei der Umcodierung verschwinden.
    Es gibt aber noch weitere Alternativen. Mehr dazu am Ende: Befehl  set xm
    Hinweis: SRCH.EXE arbeitete mit einer weniger flexiblen Tabelle namens 
             s1.asp. 
 
 2. Zirkumflex auf erster Position: Feldanfang 
    ^abc  findet  abc  nur, wenn es an einem Feldanfang steht. 
    Dabei gilt der Anfang des Feldtextes, ohne die Kategorienummer. 
    Also:  _^Shakesp  findet  #40 Shakespeare und #31 Shakespeare. 
    Wenn aber der zu durchsuchende Text (der iV-Inhalt) nicht mit '#' 
    beginnt, gilt das erste Zeichen als Textanfang. 
    Bei der grep-Suche in Textdateien ist dies der Zeilenanfang.
 
3. Dollar an letzter Position: Feldende 
    abc$  findet  abc  nur, wenn es am Ende eines Feldes steht. 
    Wenn der zu durchsuchende Text (der iV-Inhalt) nicht mit '#' 
    beginnt, gilt nur das Ende des gesamten iV-Textes. 
    Bei der grep-Suche in Textdateien ist dies das Zeilenende.
 
 4. Punkt ist Joker (engl. "wildcard") 
    AB.D  findet jedes ABxD, mit beliebigem Zeichen x 
    Mehrere Punkte innerhalb eines Suchbegriffs möglich, jeder Punkt
    steht dann für genau ein Zeichen.
 
 5. Stern: Keins, eins oder mehrere 
    ABc*D  findet ABD, ABcD, ABccD, ABcccD ... (d.h. c darf auch ganz fehlen) 
 
 6. PunktStern: Binnentrunkierung (Kombination aus 4 und 5) 
    AB.*CD  findet  ABxyzCD  mit beliebiger Folge xyz, aber im selben 
       Datenfeld, nicht irgendwo weiter hinten im Datensatz! 
       Das entspricht  AB,CD  im Programm SRCH 
 
 7. Plus: wie Stern, aber mindestens ein Vorkommnis notwendig 
    ABx+D  findet ABxD, ABxxD, ...  (d.h. mind. ein x muß vorkommen)
 
 8. Eckige Klammern: Variantensuche 
    AB[pq]Z   findet  ABpZ und ABqZ 
    AB[c-f]Z  findet  ABcZ, ABdZ, ABeZ, ABfZ 
    Die Angabe [c-f] deutet also an, daß eines der Zeichen im
    Bereich c-f an der Stelle vorkommen muß.
    [^c-f] bedeutet Negation, d.h. Zeichen c-f sollen an der Stelle 
    nicht auftreten 
    Eine Angabe [c-fp-y] verlangt, daß ein Zeichen aus dem Bereich
    c-f oder p-y vorkommt. 
    Beispiel:  ele[ck]tri  findet electri und elektri 
 
 9. Kombinationen [...]* und  [...]+ 
    * und + können auch hinter ] auftreten und beziehen sich dann auf
    die in [...] angegebenen Zeichen, d.h. 
    AB[c-f]*XY  findet z.B.  ABXY, ABcXY, ABdXY, ABceXY, ABcdcdfXY, etc 
    AB[c-f]+XY  findet aber ABXY nicht, nur die anderen wie bei * 
    Beispiele:  theat[er]+  findet Theater und theatre 
                i[sz]abel+a findet Isabella, Izabella, Izabela, Isabela
 
10. Steuerzeichen finden : Dabei hilft \
    AB\xCD   findet ABxCD 
    Das Zeichen x soll vorkommen. Man setzt \ vor solche Zeichen, 
    die sonst eine Steuerfunktion haben,  also [ ] \ + . * $ ^ = 
    sowie auf der allerersten Position die Zeichen _ und -
    Sonderfall: Die Zeichen < bzw. > findet man mit << bzw. >>
                (wegen 11., 12. und 15.)
    Beispiele: mit \. findet man einen echten Punkt
               mit <<dresden>> findet man <Dresden> (Ordnungshilfe)
 
11. \< : Wortanfang suchen 
    \<abc   findet abc, aber nur wenn es an einem Wortanfang steht. 
    Ein "Wort" beginnt mit Buchstabe oder Ziffer, d.h. es geht 
    irgendein anderes Zeichen oder kein Zeichen voran, z.B. auch - 
 
12. \> : Wortende suchen 
    abc\>   findet abc, aber nur wenn es an einem Wortende steht. 
    Hinter c soll also im Text ein Sonderzeichen oder nichts folgen. 
    10 und 11 sind kombinierbar, damit ist exakte Wortsuche möglich.
 
13. \(...\) : Wiederholung eines Ausdrucks 
    \(AB\)xyz\1   findet ABxyzAB 
    \(AB\).*\1    findet AB...AB 
                  mit beliebiger Zeichenfolge zwischen den beiden AB. 
    Es können weitere Ausdrücke \(...\) auftreten, die danach mit \2,
    \3 etc. im selben Gesamtausdruck wiederholt werden können.
 
14. Sonderwerte 
    Mit \w innerhalb jedes reg.Ausdr. kann man Positionen markieren, an 
    denen ein Buchstabe vorkommen soll: 
    \w  sucht nach einem beliebigen Buchstaben oder Unterstrich 
        #90.*[123]\w     bedeutet: 
        Kommt in #90 eine Ziffer 1,2 oder 3 und dann ein Buchstabe vor? 
    \s  sucht nach einem space (Leerzeichen, blank)  Meistens kann man einfach
        ein normales Spatium eingeben! Am Ende des Suchbegriffs aber nicht,
        es würde bei der Zwischenspeicherung in #u!! verschwinden.
        Nützlich auch, wenn man z.B. die Zeichenfolge " + " sucht! Dann
        also \s+\s verwenden (s. 17.).
 
15. Größer/Kleiner/Gleich-Suche   (Von-Bis-Suche s. 17)
    Hiermit werden Zahlen oder Zeichenfolgen verglichen, je nachdem, was vorliegt 
    abc>nnn
    findet zuerst abc und vergleicht dann die erste, im selben Feld
    hinter abc folgende Zahl mit nnn. Treffer, wenn diese
    größer als nnn ist.
    Wenn abc mehrfach vorkommt, werden alle Vorkommnisse geprueft!
    Beispiel:   #77 >100
                 findet Eintraege, wo in #77 eine Zahl >100 steht
                #77 <100
                 findet Eintraege, wo in #77 eine Zahl <100 steht
                #76 =2000
                 findet Eintraege, wo in #76 die Zahl 2000 steht
    Hinweis: Der Zahl dürfen andere Zeichen vorangehen! Der Vergleich
    beginnt bei der ersten Ziffer bzw. Minuszeichen.
    Achtung: Würde man hier schreiben:  #77>100, dann würde auch ein
             Feld #77a etc. geprüft werden
    Tip:  _ anwenden, um Probleme mit dem Punkt zu verhüten, also
          eingeben:  _#77 >50  statt  #77 >50, bes. bei Geldbeträgen!
    Beispiel: Preisangaben stehen in #9DB$p. Um alle Bestellsätze mit
              Preis >20 EUR zu finden, kann man geben:
              _#9DB.*²p>20   
    Alpha-Vergleich: Wenn hinter > bzw. < keine Zahl, sondern eine 
        Buchstabenfolge angegeben wird, findet ein alphabetischer Vergleich statt.
        Beispiel:  _#74 >A + #74 <D
              findet Einträge, wo #74 mit A,B oder C beginnt 

16. Negative Suche
    Wenn man ein Minuszeichen an den Anfang eines Ausdrucks setzt,
    und zwar ohne ein Leerzeichen dahinter!,
    wird alles gefunden, was NICHT dem Ausdruck entspricht.
    Hinweis: _ muß vor - stehen
 
17. Logische Kombinationen, Von-Bis-Suche
    Reg. Ausdrücke haben "von Natur aus" keinen Mechanismus für
    boolesche Kombinationsbefehle. Eine Lösung wurde programmiert.
    Damit kann man mehrere nach den Regeln 1-16 gebildete Ausdrücke
    A1, A2 ... logisch miteinander kombinieren, bis zu 100 Stück:
    A1 / A2 + A3 - A4 %% A5 ...
    Die Abarbeitung erfolgt von links nach rechts:
    Am Anfang: Status S=0
    A1 richtig: S=1
     / A2 : Wenn A2 richtig: S=1  [sonst S unverändert]
     + A3 : Wenn A3 falsch: S=0
     - A4 : Wenn A4 richtig: S=0
       und sogar noch das "exklusive ODER": 
     %% A5 : Wenn A5 richtig und S=0, oder A5 falsch und S=1, dann S=1, sonst S=0 
     ...
     Ende: S ist das Ergebnis
    Achtung: Leerzeichen vor und hinter dem Operator! (Anders als beim
    DOS-Programm SRCH, wo das nicht klappt.) 
    Sonderfall: Von-Bis-Suche. Diese ist als Kombination von Größer- und 
	Kleiner-Suche möglich:  
	#76 >1989 + #76 <2000  findet die Erscheinungsjahre 1990 bis 1999
    Klammerung geht (noch) nicht! Allerdings kann man durch geschickte
    Nutzung der [..]-Optionen sowie + * . auf manche Oder-Ausdrücke
    verzichten, die sonst nicht ohne Klammerung zu machen wären!
 
Andere als die hier beschriebenen Sonderzeichen haben keine Sonderwirkung, d.h. sie dürfen in Suchbegriffen vorkommen - vorausgesetzt, sie werden in den Indexparametern nicht ausgefiltert! Dann findet man sie nur mit einem _ am Anfang des Ausdrucks. 

Hinweis: Grundlage der Volltextsuche ist der FLEX-Befehl `srx`. Damit konnte das classico-Programm SRCH.EXE komplett abgelöst werden durch eine mächtigere und schnellere, aber vor allem flexiblere Lösung. Denn das Duchsuchen von Text aller Art kann nun in eigene FLEX-Abläufe eingebaut werden. 

Tip: Wer die Volltextsuche jederzeit im Zugriff haben will, schreibt z.B. diese Zeile in seinen _start.flx: 
flip 3&3: VT-Suche=X ftr
und kann sie dann mit Alt+3 starten. 

Zur Umcodierung: 
Mit dem Befehl  set x..  kann man die Umcodierung auf eine andere Parameterdatei legen, mehr dazu in der Beschreibung zum Befehl  `set x`. 
 
Anhang: Gezielte Suche nach Feldnummern 
Die Volltextsuche mit dem FLEX  ftr.flx  ist ab V32.6 darauf eingerichtet, nach Feldnummern suchen zu können, auch wenn z.B. Zeichenfolgen wie #60 auch innerhalb von Feldtexten auftreten können. Grundregel: vor die zu suchende Feldnummer die Kombination \n setzen; sie steht für "Feldende", d.h. mit  \n#60  wird die  #60  nur gefunden, wenn direkt davor ein Feldendezeichen (dasjenige des vorangehenden Feldes) steht. Was sofort die Fragen aufwirft: 

a) Wie finde ich #60, wenn es in irgendeinem Feld intern auftritt? 
   \n#.*#60
b) Wie finde ich #60, wenn es in einem Feld #81 intern auftritt? 
   \n#81.*#60
c) Wie stelle ich fest, ob #60 genau in einem #81 vorkommt (nicht aber in irgendeinem #81x)? 
   \n#81\s.*#60        (denn \s steht für Spatium)
d) Wie finde ich Sätze, in denen das Zeichen  #  in keinem Feldinhalt intern auftritt? 
   -\n#.*#

?Regeln=h =allgemeine regeln 

?srx=h xsrx 
?set x=h xset=set x 
?Anhang=h =Anhang: