Suchanfragen¶
Für die Suchen nach bestimmten Objekten wie Produkten und Benutzer steht ein Suchpresenter zur Verfügung. Dieser Suchpresenter verfügt über einen Queryparser, der es erlaubt bestimmte Suchanfragen an den Server zu senden.
Die Abfragesprache ist an SQL angelehnt aber es steht nicht der volle Funktionsumfang von SQL zur Verfügung. In den nachfolgenden Beispielen werden die Felder der Benutzer-API verwendet.
Einfache Feldabfragen¶
Bei Feldabfragen wird der Feldname gefolgt von einem Operator und einem Wert definiert. Gültige
Operatoren sind: =
, <
, >
, <=
, >=
, LIKE
, NOT LIKE
, NOT
, RLIKE
, IN
// Datensatz mit der UID 1 suchen
uid=1
// Alle Datensätze suchen die eine UID größer 10 haben
uid>10
// Alle Datensätze suchen die eine UID größer gleich 10 haben
uid>=10
// Alle Datensätze deren Name mit hans beginnt
name LIKE "hans%"
// Alle Datensätze in der die 2 in der Mehrfach Zuweisung catalogingAssignmentABID2 enthalten ist
2 IN catalogingAssignmentABID2
// Alle Datensätze in der die CID in der Kommaliste enthalten ist
cid IN "2,3,6,4"
Die Werte einer Abfrage können Boolean (true/false), Null, eine Zahl oder eine Zeichenkette sein.
// Integer als Wert
uid=1
// Null als Wert
uid=NULL
// Zeichenkette als Wert
uid="hello"
// Boolean als Wert
uid=true
Mehrere Ausdrücke können über AND
und OR
verknüpft werden.
// UID größer 10 und kleiner 20
uid>10 AND UID<10
// UID kleiner 10 oder größer 20
uid<10 OR UID>10
Hinweis
Wird OR
und AND
gemischt, so werden alle OR
Operatoren automatisch
geklammert. A OR B AND C
wird zu (A OR B) AND C
Facettensuche¶
Bei Suchanfragen die Facetten besitzen, können die Namen der Facetten den Felder vorangestellt werden. Dies ist immer dann notwendig, wenn der gewünschte Feldname nicht eindeutig ist.
// Suche nach den Feldern uid in address und personal
personal.uid=10 AND address.UID=10
Funktionen¶
Über die Abfragesprachen können auch Funktionen definiert sein. Die Funktion IN
erlaubt die Suche nach
einem Wert in einer Liste.
// Alle Datensätze die in einer Liste enthalten sind
uid IN "1,2,3,4"
URL codieren¶
Bei der Übergabe des Query über den Parameter ´q´ muss dieses URL codiert übergeben werden.
// Query
itemIID IN "500,1001" AND language=de
// URL-codiert
/api/commerce/item/text/search?q=itemIID%20IN%20%22500,1001%22%20AND%20language%3Dde&count=50
Spezifikation¶
<"> = <ASCII Anführungszeichen>;
SPACE = <ASCII SP, Leerzeichen>;
DIGIT = <jede ASCII Ziffer>
CHAR = <jedes ASCII Zeichen>;
ALPHA = <jedes alphatische Zeichen>;
HTAB = <ASCII HT, horizontaler Tabulator>;
LWSP-char = SPACE / HTAB;
linear-white-space = 1*(LWSP-char);
qtext = <jedes CHAR ausgenommen <">, "\" & CR,
und inklusive linear-white-space>;
quoted-pair = "\" CHAR;
quoted-string = <"> *(qtext/quoted-pair) <">;
table = *(ALPHA);
field = *(ALPHA);
table-field = [table <.>] field;
operator = "=", "<", ">", "<=", ">=", "LIKE", "NOT LIKE",
"NOT", "RLIKE", "IN";
value = quoted-string | *DIGIT;
condition = table-field operator value;
conjunktion = "AND" | "OR";
query = 1*(condition) *(conjunktion condition);