Tous les produits
Search
Centre de documentation

OpenSearch:Clause de filtrage

Dernière mise à jour :Aug 22, 2026

Une clause de filtrage affine les résultats de recherche en appliquant des conditions sur les champs, en complément d'une clause de requête. Elle s'applique uniquement aux champs d'attribut.

Syntaxe

filter=<field><operator><value>

Combinez plusieurs conditions à l'aide d'opérateurs logiques :

filter=category=2 AND (hit+sale)*rate>10000

Opérateurs

Type Opérateurs pris en charge
Relationnel >, <, =, <=, >=, !=
Arithmétique +, -, *, /, &, ^, `

`

Logique AND, OR, () — doivent être en majuscules
Appartenance à une liste `in(field, "v1

v2

v3")`, `notin(field, "v1

v2

v3")`

Contraintes par type de champ

Type de champ Opérateurs pris en charge Notes
INT, INT32, INT64 Tous les opérateurs relationnels et arithmétiques Utilisez in/notin pour vérifier l'appartenance à une liste (uniquement pour INT et INT32 ; consultez in et notin pour connaître les types pris en charge)
FLOAT, DOUBLE >, <, <=, >=, != Évitez = : la précision des nombres à virgule flottante rend l'égalité exacte peu fiable
LITERAL =, != uniquement Les champs LITERAL ne sont pas tokenisés : seule la correspondance exacte est prise en charge. Entourez les valeurs de guillemets doubles, par exemple tags="palace" ; l'omission des guillemets renvoie l'erreur 6135 : « The value type of the constant expression is invalid »
INT_ARRAY, FLOAT_ARRAY, DOUBLE_ARRAY, LITERAL_ARRAY Relationnel et arithmétique Utilisez bit_struct pour les opérations au niveau des bits sur les éléments INT_ARRAY
TEXT, SHORT_TEXT Non pris en charge Ces types ne peuvent pas être configurés comme champs d'attribut et ne peuvent pas être utilisés dans les clauses de filtrage
ARRAY (générique) Non pris en charge pour in/notin Les champs utilisant un analyseur pour les recherches floues sont également exclus de in/notin

Remarques :

  • Une clause de filtrage est facultative.

  • Tous les champs référencés dans une clause de filtrage doivent être configurés comme champs d'attribut dans le schéma de l'application. Les champs de type TEXT et SHORT_TEXT ne peuvent pas être configurés comme champs d'attribut.

  • Des fonctions telles que distance peuvent servir au tri dans les clauses de filtrage.

Fonctions intégrées

Les fonctions suivantes étendent les capacités de filtrage au-delà des simples comparaisons de champs.

distance — filtrer par proximité géographique

Renvoie la distance sphérique entre un emplacement stocké et un point de requête. Utilisez cette fonction pour les scénarios de services basés sur la localisation (LBS) où vous devez limiter les résultats à un rayon géographique donné.

Les champs lon et lat doivent être configurés comme champs d'attribut.

Exemple : Trouver les restaurants KFC situés dans un rayon de 10 km autour d'un utilisateur situé à la longitude 120,34256 et à la latitude 30,56982.

query=default:'KFC'&&sort=+distance(lon,lat,"120.34256","30.56982")

in_polygon — filtrer par zone de livraison ou périmètre de service

Vérifie si un point fixe (fourni dans la requête) se trouve à l'intérieur d'un polygone stocké dans un champ de document. Utilisez cette fonction lorsque chaque document définit une zone géographique (comme le rayon de livraison d'un commerçant) et que vous souhaitez trouver les zones contenant un emplacement utilisateur spécifique.

Exemple : Trouver les commerçants dont les zones de livraison couvrent l'utilisateur situé aux coordonnées (120,307234, 39,294245), où coordinates stocke le polygone de livraison de chaque commerçant.

query=default:'Foods'&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0

in_query_polygon — filtrer par une zone définie dans la requête

Vérifie si un point stocké dans un document se trouve à l'intérieur d'un polygone que vous définissez dans la requête. Utilisez cette fonction lorsque vous souhaitez effectuer une recherche dans une limite géographique personnalisée, telle qu'un quartier d'affaires.

Les sommets du polygone sont transmis via kvpairs. Le champ point stocke l'emplacement géographique de chaque document.

Exemple : Trouver les restaurants KFC situés dans le quartier d'affaires Yintai.

query=default:'KFC'&&filter=in_query_polygon("polygons",point)>0&&kvpairs=polygons:xA\,yA\,xB\,Yb\,xC\,Yc;xD\,yD\,xE\,yE\,xF\,yF\,xG\,yG

bit_struct — filtrer par tableaux d'entiers compactés au niveau des bits

Divise chaque entier 64 bits d'un champ INT_ARRAY en plages de bits nommées et évalue une condition sur celles-ci. Utilisez cette fonction lorsqu'un seul champ encode plusieurs attributs (tels que les heures d'ouverture et de fermeture) compactés en segments de bits.

Exemple : Trouver les magasins ouverts entre 14 h 00 (840 minutes) et 15 h 30 (930 minutes). Le champ open_time est de type INT64_ARRAY. Chaque entier stocke l'heure d'ouverture dans les bits 0–31 et l'heure de fermeture dans les bits 32–63.

filter=bit_struct(open_time, "0-31,32-63","overlap,$1,$2,840,930")!=-1

fieldlen — filtrer par longueur de champ

Renvoie la longueur en caractères d'un champ LITERAL. Utilisez cette fonction pour exclure les valeurs vides ou trop longues.

Exemple : Renvoyer uniquement les documents où usr_name n'est pas vide.

query=default:'Keyword'&&filter=fieldlen(usr_name)>0

in et notin — filtrer par une liste de valeurs

Vérifie si la valeur d'un champ figure (ou est absente) dans une liste séparée par des barres verticales. Types pris en charge : INT, LITERAL, FLOAT, DOUBLE. Non pris en charge pour ARRAY, TEXT ou les champs utilisant un analyseur.

Pour plus d'informations, consultez in et notin.

Exemple : Renvoyer les documents contenant « iphone » où le champ INT type vaut 1, 2 ou 3.

query=default:'iphone'&&filter=in(type, "1|2|3")

Exemple : Exclure les documents où le champ INT32 type vaut 1, 2 ou 3.

query=default:'iphone'&&filter=notin(type, "1|2|3")

multi_attr — filtrer par un élément spécifique dans un champ de tableau

Renvoie la valeur à une position donnée dans un champ de tableau. Utilisez cette fonction lorsqu'un champ stocke plusieurs valeurs pour différents attributs (tels que le prix du marché, le prix réduit et le prix de vente) et que vous souhaitez filtrer sur une position spécifique.

Exemple : Trouver les téléphones mobiles dont le prix de vente (position 2 dans le champ price) est inférieur à 1 000.

query=default:'Mobile phone'&&filter=multi_attr(price,2)<1000

Exemples

Filtrer par un champ INT

Le champ category (INT32) utilise 1 pour les actualités et 2 pour les forums. Pour trouver des documents sur « Zhejiang University » dans la catégorie forum, utilisez l'une des syntaxes suivantes :

query=default:'Zhejiang University' AND category_search:'2'
query=default:'Zhejiang University'&&filter=category=2

Filtrer par un champ de tableau LITERAL

Dans une application de recherche de romans, le champ tags (STRING_ARRAY) stocke des tags de genre tels que « palace », « suspense and horror » et « romance ». Pour trouver des résultats du genre « palace » pour « Empresses in the Palace » :

query=default:'Empresses in the Palace'&&filter=tags="palace"

Combiner des opérateurs arithmétiques et relationnels

Dans une application e-commerce, trouvez des produits de type robe où le score d'engagement combiné (hit + sale) * rate dépasse 10 000 et où l'annonce a été créée avant l'horodatage 1402345600 :

query=default:'dress'&&filter=(hit+sale)*rate>10000 AND create_time<1402345600