driver/searchdefs

Die driver/searchdefs-Masken sind ein spezieller Fall von Masken, sie haben keine GRIDs und dementsprechend auch keine CELLs. Sie werden von cell/SEARCHFIELD innerhalb von driver/search-Masken benutzt. Die driver/searchdefs-Masken bestimmen die Art und Weise wie nach einem oder mehreren Begriffen gesucht wird.

Mask-Properties

Table Die Tabelle für die diese searchdef definiert wird.
Searchtype TEXT für Text-Suchen, PHP für frei definierte Such-Algorithmen in PHP, SELECTOR für ein Pulldown, um andere driver/searchdefs-Masken durch den Benutzer auswählbar zu machen.

TEXT

Lesen Sie in der Benutzer-Anleitung mehr über die Textsuche.

Take Input As Whole String Wenn gesetzt, wird die Benutzer-Eingabe nicht zwischen Wörtern gesplittet, sondern als eine Komplett-Eingabe benutzt; die Eingabe wird in doppelte Anführungszeichen gesetzt. Diese Checkbox wird benutzt, wenn z.B. Inventar-Nummern gesucht werden sollen, die ein Leerzeichen beinhalten.
Columns Die Spalten über die gesucht wird. Die Erklärung der Tabelle ist weiter unten.
Additional Select SQL SQL zur Ergänzung des von dieser searchdef zusammengebauten SQLs. Dieser String wird mit AND an das zusammengebaute SQL angehängt. Benutzen Sie Debug SQL in der driver/search-Maske, um die Auswirkungen zu überprüfen.
LINKED (eadb_links) Hier können Sie andere searchdefs angeben über die mittels des eingegeben Suchbegriffs gesucht wird. In der anderen searchdef gefundenen Objekte werden über die allgemeine Verknüpfungs-Tabelle eadb_links mit in diese Suche einbezogen. eadb_links wird hauptsächlich in älternen easydbs benutzt.

Spalten der Tabelle für den Parameter Columns:

Table Die Tabelle für die die Column angezeigt wird. Hier wird zuerst die Haupt-Tabelle aufgelistet und danach alle Tabellen die n-1 zu der Haupt-Tabelle verknüpft sind (Wiederholgruppen).
Column Die Spalte für die die Such-Art definiert wird.
Type Der easydb-Datentyp.
  • Text ist ein Text beliebiger Länge der mit einem Volltext-Index durchsucht wird.
  • String ist ein Text der als nicht-Volltext durchsucht wird.
  • Integer ist eine Zahl
  • Easydb Asset Server File eine easydb-Asset-Server-ID-Spalte
  • Link: <Tabelle> ist eine 1-n-Verknüpfung zu einer anderen Tabelle
  • Decimal(precision 2) ist eine Zahl mit 2 Nachkommastellen, gespeichert als Integer.
Unused Aktivieren Sie diese Spalte, wenn die Spalte aus der Tabelle mit dem eingegeben Such-Begriff(en) nicht durchsucht werden soll.
Search Gibt an, ob die Spalte durchsucht wird oder nicht. Dafür wird für Text-Spalten-Typen je Searchdef ein Tsearch2-Index benutzt und für String-Spalten-Typen ein sogenannter patternopts-Index.

Für Spalten vom Typ easfile ist die Suche nach Filename (Dateinamen) oder Fulltext in Documents (Volltext in Dokumenten) möglich.

Für 1-n Link-Spalten kann hier angegeben werden, über welche searchdef in Link-Tabellen zu den Suchbegriff(en) IDs gesammelt und gegen diese Spalte gematcht werden.

Wählen Sie im Pulldowns unterhalb reverse 1-n eine Link-Spalte zu einer anderen Tabelle: Damit wird die aktuelle Searchdef von allen für die andere Tabelle definierten Searchdefs benutzt. Mit dieser Methode lassen sich n-m-Tabellen in die Suche einbeziehen. Wenn Sie eine Tabelle unter reverse 1-n verlinken, hat die Verlinkung für eine direkte Suche in der aktuellen Searchdef keine Bedeutung.

Weitere Spalten für Datenbanken mit MySQL-Backend und Versionen vor 4.0.159:

%Like% Die Spalte wird mit SQL-%LIKE% gegen die Such-Begriff(e) gematcht. Diese Art des Suchens ist langsam (grün markiert).
%Like Die Spalte wird rechtstrunkiert mit SQL-%LIKE gegen die Such-Begriff(e) gematcht. Diese Art des Suchens ist langsam es sei denn, es gibt einen INDEX auf der Spalte.
Like Die Spalte wird nicht trunkiert mit SQL-LIKE gegen die Such-Begriff(e) gematcht. Der Benutzer kann durch * selber trunkieren.
= Die Spalte wird mit SQL-= gegen die Such-Begriff(e) gematcht. Diese Suche bietet sich an bei Zahlen und auch in Verbindung mit Take input as whole string.
Word Die Spalte wird mit einem regulären Ausdruck gegen die Such-Begriff(e) gematcht, so dass wortweise gesucht wird. Diese Art des Suchens ist langsam (grün markiert).
Full Die Spalte wird mit einem Volltext-Index gegen die Such-Begriff(e) gematcht, so dass wortweise gesucht wird. Hierfür ist ein Volltext-Index nötig, der für PostgreSQL mit ezadmin erstellt werden kann.

Für Spalten vom Typ easfile ist auch eine Volltextsuche möglich. Hierbei wird eine Volltext-Suchanfrage an den EAS gestellt und die zurückgegebenen Asset-IDs werden mit der easfile-Spalte abgeglichen.
Linked Die Bedeutung dieser Spalte ist für 1-n Link-Spalten in der vorherigen Tabelle erklärt.

Suchstrategien und Indexe

Nur für PostgreSQL und seit Version 4.0.159.

Mit der Config-Variable SEARCH_AUTO_WILDCARD kann vom System-Administrator festgelegt werden, dass um Suchterms, die keine Platzhalter oder Anführungszeichen enthalten, automatisch ein * vor und nach jedem Suchwort eingefügt werden.

Diese Tabelle gibt eine Übersicht über die intern benutzten Suchstrategien bei bestimmten Suchen.

easydb Datenbank Typ Suche Suchstrategie Geschwindigkeit
Text such mich tsearch2(such&mich) ++
Text such* mich tsearch2(such*&mich) ++
Text *such mich ILIKE ‘%such’ INTERSECT tsearch2(mich) -
Text "such mich" tsearch2(such&mich) INTERSECT ILIKE~ ‘\bsuch\s+mich\b’ +
Text "such* mich" tsearch2(such*&mich) INTERSECT ILIKE~ ‘\bsuch\s+mich\b’ +
Text "such m\*ch" tsearch2(such&m*ch) INTERSECT ILIKE~ ‘\bsuch\s+m*ch\b’ -
Text ""such mich"" tsearch2(such*&mich) [in einer Tabelle] ++
Text ""such* mich"" tsearch2(such*&mich) [in einer Tabelle] ++
Text ""*such mich"" ILIKE ‘%such’ [in einer Tabelle] -
Text ‘such m*ch’ LIKE ‘%such m*ch%’ -
String such mich ILIKE ‘such’ INTERSECT ILIKE ‘mich’) ++
String such* mich (ILIKE ‘such%’ INTERSECT ILIKE ‘mich’) ++
String *such mich ILIKE ‘%such’ INERSECT ILIKE ‘mich’ -
String "such mich" ILIKE ‘such mich’ +
String "such m*ch" ILIKE ‘such m%ich’ +
String ""such mich"" (ILIKE col1 ‘such’ OR ILIKE col2 ‘such’) INTERSECT (ILIKE col1 ‘mich’ OR ILIKE col1 ‘such’) ) [in einer Tabelle] +
String ""such* mich"" (ILIKE col1 ‘such%’ OR ILIKE col2 ‘such’) INTERSECT (ILIKE col1 ‘mich%’ OR ILIKE col1 ‘such’) ) [in einer Tabelle] +
String ""*such mich"" (ILIKE col1 ‘%such’ OR ILIKE col2 ‘such’) INTERSECT (ILIKE col1 ‘%mich’ OR ILIKE col1 ‘such’) ) [in einer Tabelle] -
String "such m\*ch" ILIKE ‘such m*ch’ +
String ‘such m*ch’ EQUALS ‘such m*ch’ ++

Erklärung der Pseudo-SQL-Suchbegriffe:

  • ILIKE Case-Insensitive-Suche
  • ILIKE~ Case-Insensitive-Suche mit regulärem Ausdruck
  • INTERSECT Schnittmengen-Suche
  • LIKE Case-Sensitiv
  • tsearch2 Volltext-Suche in dem für diese Searchdef gebauten Index
  • EQUALS Suche mit =

PHP

Der PHP-Typ erlaubt beliebiges PHP zum Generieren von SQL, welches dann mit in die Suche eingebaut wird. Sie schreiben den Inhalt einer Funktion, welche in dem Array $values die Werte der verwendeten Suchfelder übergeben bekommt.

Inputs Anzahl der für diese searchdef verfügbaren Suchfelder. Benutzen Sie cell/SEARCHFIELD, um die Suchfelder in Ihrer driver/search-Maske einzubauen.
Function Der Inhalt der PHP-Funktion, die Werte der Inputs sind im Array $values.

Beispiel 1 um eine Datierung zu suchen:
return check_datierung($values[0],"datierung");

Beispiel 2 für ein Datumsbereich mit 2 Eingabefeldern:
// check inputs
if (!$values[0] && !$values[1]) {
  // empty? ignore
  return "";
} else if (!$values[1]) {
  // only first value given? build range from then to today
  $datestr = $values[0] . " - " . strftime("%d.%m.%Y", time());
} elseif (!$values[0]) {
  // only second date given? build range from day 0 to then
  $datestr = "1.1.1001 - " . $values[1];
} else {
  // both values given? create range
  $datestr = $values[0] . " - " . $values[1];
}
$sql = search_date_sql($datestr, "easydb_insert_time");
if ($sql == "REASK") {
    alert("Bitte überprüfen Sie Ihre Eingabe für das Feld "Einstelldatum".");
}
return $sql;
Beispiel 3 für eine EAS-Schlüsselwortsuche (ein Eingabefeld):
// check if some search term is given
if (strlen($values[0]) > 0) {
  $ids = array();
  // List of metadata fields to search in. The syntax of these
  // entries is "metadata.$GROUPNAME.$KEYWORDNAME"
  $fields = array(
    "metadata.IPTC::ApplicationRecord.IPTC2:Caption-Abstract",
    "metadata.IPTC::ApplicationRecord.IPTC:Caption-Abstract",
    "metadata.IPTC::ApplicationRecord.IPTC2:ApplicationRecordVersion",
    "metadata.IPTC::ApplicationRecord.IPTC:ApplicationRecordVersion",
  );
  // for each keyword an EAS request is send for normal keyword search
  // and for keyword fulltext search, so don't use too extensively as
  // it may slow down the search
  foreach ($fields as $field) {
    $ids = array_merge($ids, EAS::searchByKeyword($field, $values[0]));
    $ids = array_merge($ids,
        EAS::searchByKeyword($field, "FULLTEXT({$values[0]})"));
  }
  // map EAS IDs to easydb IDs
  if (count($ids)) {
    return "bild IN (".implode(",", $ids).")";
  } else {
    return "FALSE";
  }
}
Weitere Optionen der EAS-Schlüsselwortsuche finden sich in der EAS-API-Dokumentation

SELECTOR

Mit diesem Typ können Sie ein Pulldown in eine driver/search-Maske einbauen, welches dem Benutzer die Auswahl der verwendeten searchdef erlaubt. Die angezeigten Optionen des Pulldowns werden über Stringtool gemappt. Für den SELECTOR müssen Sie mit cell/SEARCHFIELD immer 2 Suchfelder ausgeben.

SELECTOR 0 Die searchdef, welche als 1. Option in dem Pulldown erscheint.
SELECTOR 1 Die searchdef, welche als 2. Option in dem Pulldown erscheint. Erscheint nur, wenn SELECTOR 0 ausgewählt wurde.
SELECTOR 2 Die searchdef, welche als 3. Option in dem Pulldown erscheint. Erscheint nur, wenn SELECTOR 1 ausgewählt wurde.
SELECTOR <n> Die searchdef, welche als n-te Option in dem Pulldown erscheint. Erscheint nur, wenn SELECTOR (n-1) ausgewählt wurde.
Preselect Die Option, welche im Pulldown vorausgewählt werden soll. Wenn leer wird die erste ausgewählt.