Aller au contenu principal
Version : Suivant

$filter

Permet de rechercher les données d'une dataclass ou d'une méthode (par exemple, $filter="firstName!='' AND salary>30000")

Description

Ce paramètre vous permet de définir le filtre de votre dataclass ou de votre méthode.

Utiliser un filtre simple

Un filtre est composé des éléments suivants :

{attribute} {comparator} {value}

Par exemple : $filter="firstName=john"firstName est l'attribut, = est le comparateur et john est la valeur.

Utiliser un filtre complexe

Un filtre plus complexe est composé des éléments suivants, qui joint deux requêtes:

{attribute} {comparator} {value} {AND/OR/EXCEPT} {attribute} {comparator} {value}

Par exemple : $filter="firstName=john AND salary>20000"firstName et salary sont les attributs de la dataclass "Employee".

Utiliser la propriété params

Vous pouvez également utiliser la propriété params de 4D qui est une collection de valeurs.

{attribute} {comparator} {placeholder} {AND/OR/EXCEPT} {attribute} {comparator} {placeholder}&$params='["{value1}","{value2}"]'

Par exemple : $filter="firstName=:1 AND salary>:2"&$params='["john",20000]'" où firstName et salary sont les attributs de la dataclass "Employee".

Pour plus d'informations sur la façon de rechercher des données dans 4D, reportez-vous à la documentation de dataClass.query().

Lorsque vous insérez des guillemets (') ou des guillemets doubles ("), vous devez les échapper en utilisant leur code de caractère :

  • Quotes ('): \u0027
  • Guillemets doubles ("): \u0022
  • Par exemple, vous pouvez écrire ce qui suit lors du passage d'une valeur avec un guillemet lors de l'utilisation de la propriété params :
    http://127.0.0.1:8081/rest/Person/?$filter="lastName=:1"&$params='["O\u0027Reilly"]'

    Si vous passez la valeur directement, vous pouvez écrire ce qui suit: http://127.0.0.1:8081/rest/Person/?$filter="lastName=O'Reilly"

    Attribut

    Si l'attribut se trouve dans la même dataclass, vous pouvez simplement le passer directement (par exemple, firstName). Cependant, si vous souhaitez lancer une requête dans une autre dataclass, vous devez inclure le nom de l'attribut relationnel et le nom d'attribut, c'est-à-dire le chemin d'accès (par exemple, employeur.nom). Le nom d'attribut est sensible à la casse (firstName n'est pas égal à FirstName).

    Vous pouvez également rechercher des attributs de type Objet en utilisant la notation par points. Par exemple, si vous avez un attribut dont le nom est "objAttribute" avec la structure suivante :

    {
    prop1: "this is my first property",
    prop2: 9181,
    prop3: ["abc","def","ghi"]
    }

    Vous pouvez rechercher dans l'objet en écrivant ce qui suit :

    GET /rest/Person/?filter="objAttribute.prop2 == 9181"

    Comparateur

    Le comparateur doit être l'une des valeurs suivantes :

    ComparateurDescription
    =est égal à
    !=différent de
    >supérieur à
    > =supérieur ou égal à
    <inférieur à
    <=inférieur ou égal à
    begincommence avec

    Similitude vectorielle

    Si l'attribut stocke des objets vectoriels (voir comment configurer un champ 4D pour qu'il ne stocke que des objets de la classe 4D.Vector), vous pouvez filtrer la classe de données à l'aide de vecteurs, également appelés embeddings.

    Pour plus d'informations sur les recherches par similarité vectorielle, veuillez vous référer à la section Requêtes par similarité vectorielle.

    Utilisez la propriété params pour fournir au filtre le paramètre de comparaison de vecteurs, en utilisant une syntaxe du type :

    {vectorAttribute} {comparator} {placeholder}&$params=vectorComparison

    Le paramètre vectorComparison est une collection des éléments suivants :

    PropriétéTypeDescription
    [].vectorCollection de nombresObligatoire. Une collection qui représente le vecteur à comparer
    [].metricTextOptionnel. Calcul vectoriel à utiliser pour la recherche. Valeurs prises en charge :
  • "cosine" (valeur par défaut en cas d'omission) : calcule la similarité cosinus entre les vecteurs
  • . "dot" : calcule la similarité en points entre les vecteurs.
  • "euclidean" : calcule la distance euclidienne entre les vecteurs.
  • [].thresholdRealFacultatif (valeur par défaut : 0,5). Valeur seuil utilisée pour filtrer les comparaisons de vecteurs sur la base de leur score de similarité cosinus, point ou euclidienne selon la "métrique" sélectionnée. Il est fortement recommandé de choisir une similitude qui corresponde le mieux à votre cas d'utilisation spécifique pour des résultats optimaux.

    Seul un sous-ensemble de comparateurs est pris en charge pour les comparaisons vectorielles. Notez qu'ils comparent les résultats à la valeur de seuil (threshold) :

    ComparateurSymbole(s)Commentaire
    Inférieur à<Inférieur au seuil
    Supérieur à>Supérieur au seuil
    Inférieur ou égal à<=Inférieur ou égal au seuil
    Supérieur ou égal à> =Supérieur ou égal au seuil

    Exemples

    Dans l'exemple suivant, nous recherchons tous les employés dont le nom de famille commence par un "j" :

     GET  /rest/Employee?$filter="lastName begin j"

    Dans cet exemple, nous recherchons dans la dataclass "Employee" tous les employés d'une entreprise autre que Acmedont et dont le salaire est supérieur à 20 000 :

     GET  /rest/Employee?$filter="salary>20000 AND  
    employer.name!=acme"&$orderby="lastName,firstName"

    Dans cet exemple, nous recherchons dans la dataclass "Person" toutes les personnes dont la propriété numérique, de l'attribut anotherobj de type Objet, est supérieure à 50 :

     GET  /rest/Person/?filter="anotherobj.mynum > 50"

    Dans cet exemple, nous effectuons une recherche vectorielle avec des valeurs de base :

     GET  /rest/Person/?filter="VectorAtt>=:1"&$params='[{vector:[1,2,3],threshold:1}]'