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.
| 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. |
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. |
| 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.
|
| 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. |
| %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. |
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:
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 |
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. |