Deutsch English
Alphabetischer Index
Array-Funktionen
CGI-Funktionen
Datentypen
Datums/Uhrzeit-Funktionen
Debugging
Operatoren
Ramtext-Funktionen
Selektion
Socket-Funktionen
Sonstige-Funktionen
Sprachelemente
Statistik-Funktionen
Stream-Funktionen
String-Funktionen
System-Funktionen
Tabellen-Funktionen
Text-Funktionen
Volltext-Funktionen
  • genlist()
  • genrel()
  • getftinfo()
  • markbits()
  • marktable()
  • scanrec()
  • scanrecs()
  • unscanrec()
    Zahlen-Funktionen
    Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
    Themenkomplex Volltext-Funktionen
    Funktion markbits()
    Kurz Sucht im Volltextindex
    Syntax MarkBits(D,I,Suchstring,ExtABC,Ops,MaskenZahl,BitFeld,R1,R2,...) : INTEGER
    Parameter D: Tabellenhandle der Ausgangstabelle
    I: Tabellenhandle der Stichworttabelle
    Ausduck: Suchstring
    ExtABC: wie bei ScanRecs
    Ops: logische Operatoren
    MaskenZahl: Integerzahl
    BitFeld: Variable vom Typ TBits[xxx]
    R1, R2...: Tabellenhandles der Relationstabellen
    Ergebnis >=0 : Anzahl der gefundenen Datensätze
    <0 : Fehlercode
    Siehe auch:
    scanrecs() marktable() genrel() genlist()
    Beschreibung Das Funktionergebnis ist die Anzahl der gefundenen Datensätze (falls positiv) bzw einer der Fehlercodes:

    -64 ungültige Stichworttabelle
    -77 ungültige Relationstabelle
    -56 illegale Klammerung im Suchstring
    -45 ungültiges Zeichen im Suchstring

    Die letzten beiden Fehler können mit TDB_ErrorMsg und TDB_ErrorOfs näher bestimmt werden.

    Beim Suchstring handelt es sich um eine Zeichenkette mit folgendem Aufbau:

    Suchstring ::= Ausdruck
    Ausdruck ::= Term { Oder-Operator Term}
    Term ::= Faktor { Und-Operator Faktor}
    Faktor ::= Suchwort | "(" Ausdruck ")"

    Ein Suchwort ist eine Zeichenkette aus Buchstaben, den Zeichen aus ExtABC sowie den Sonderzeichen "?" und "*". Dabei steht "?" als Platzalter
    für genau ein beliebiges Zeichen, "*" für beliebig viele Zeichen.

    Folgende Operatoren sind vordefiniert (wenn in Ops ein Leerstring übergeben wird):

    Oder-Operator + (Vereinigungsmenge, logisches ODER)
    Und-Operatoren , (Schnittmenge, logisches UND)
    - (Schnitt mit Komplementärmenge, logisches UND NICHT)


    Beispiele:

    Meier findet alle Datensätze die das Wort Meier in beliebiger Groß- oder Kleinschreibung enthalten.
    Mei*er findet die Datensätze, die Wörter enthalten, die mit Mei beginnen und mit er enden.
    Hans, Meier im Datensatz muß sowohl das Wort Hans als auch Meier enthalten sein.
    Hans+Meier findet Datensätze in denen Hans oder Meier oder beides vorkommt.
    Hans-Meier findet Datensätze, in denen zwar Hans vorkommt, Meier aber nicht.

    Ops

    Im Parameter Ops können die Operatoren umdefiniert werden. Dazu muß hier eine Zeichenkette mit genau drei Zeichen übergeben werden. Das
    erste Zeichen ist dann der Operator für logisches UND, das zweite entspricht dem logischen ODER, deas dritte schließliche dem logischen UND
    NICHT.

    Maskenzahl

    Die Angabe einer Maskenzahl ist nur dann sinnvoll, wenn bereits bei der Volltextindizierung mit einem Maskenfeld oder mit Maskenkonstanten
    gearbeitet wurde. Die hier angegebene Zahl und die in der Verknüpfung gespeicherten Zahl werden mit einem binären AND verknüpft. Es werden
    nur solche Datensätze gefunden, bei denen das binäre AND einen Wert ungleich 0 ergibt.

    Sonderfall: Die Maskenzahl 0 liefert alle Verknüpfungen.

    Beispiel:

    Die Volltextindizierung erfolgte mit folgender Indexbeschreibung: Fields(Name:1,Vorname:2,Straße:4)

    Die Suche nach Hans liefert dann je nach Maskenzahl

    0 In (wenigstens) einem der Felder ist das Wort enthalten
    1 Das Wort ist im Feld Name enthalten
    2 Das Wort ist im Feld Vorname enthalten
    3 Das Wort ist im Feld Name oder im Feld Vorname (oder in beiden) enthalten
    4 Das Wort ist im Feld Straße enthalten
    5 Das Wort ist im Feld Name oder im Feld Straße (oder in beiden) enthalten
    ...
    7 Das Wort ist (wenigstens) in einem der Felder Name, Vorname oder Straße enthalten.

    Bitfeld

    In diesem Parameter unterscheiden sich die beiden Suchfunktionen. Bei MarkTable werden die Treffer direkt in die Markierungsliste der Tabelle
    eingetragen. Bei MarkBits hingegen werden die Treffer in ein Bitfeld übertragen. Das ist dann von Vorteil, wenn mehrfach gesucht wird und die
    einzelnen Suchergebnisse zu einem Gesamtergebnis zusammengestzt werden.

    Beispiel:

    VAR Treffer, Temp : TBITS[1000000]

    MarkBits(...,Treffer,...)
    MarkBits(...,Temp,...)
    BitAnd(Treffer,Marks) (ergibt die Schnittmenge aus beiden Suchen)
    BitOr(Treffer,Marks) (ergibt die Vereinigungsmenge aus beiden Suchen)

    Expertenhinweis: Ein Bitfeld, wie wir es hier einsetzen, kann auch als charakteristische Mengenfunktion aufgefaßt werden, also eine Abbildung der
    Menge aller Datensätze einer Tabelle in die Menge {0,1}. Es handelt sich dabei um eine sehr effiziente Implementierung von (Teil-)Mengen, da die
    Mengenfunktionen dann direkt (als fundamentale Maschinenoperationen) ausgeführt werden. Auch MarkTable arbeitet intern mit einem Bitfeld und
    bildet erst am Ende der Funktion die gefundene Menge auf die Markierungsliste ab.

    tdbengine chat
    irc.tdbengine.org
    #tdbengine

       Copyright © 2003-2004 tdb Software Service GmbH
       Alle rechte vorbehalten. / All rights reserved
       Letzte Änderung: 21.10.2004
    {Fehler für :execmacro{execmacro="sessionspy"}