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);