Tous les produits
Search
Centre de documentation

OpenSearch:Range query

Dernière mise à jour :Aug 10, 2026

Les requêtes d'intervalle filtrent les résultats selon des valeurs numériques, des horodatages ou des coordonnées géographiques. Parmi les cas d'utilisation courants figurent le filtrage de produits par prix, la recherche d'enregistrements sur une période donnée et la localisation de commerçants à proximité dans des scénarios O2O (Online-to-Offline).

Pour exécuter une requête d'intervalle, procédez comme suit :

  1. Définissez le type de champ dans le schéma de l'application.

  2. Créez un index mono-champ dans le schéma d'index avec l'analyseur approprié.

  3. Rédigez la requête d'intervalle en respectant la syntaxe propre à votre type de champ.

Types de champs pris en charge

Les requêtes d'intervalle ne prennent en charge que trois types de champs. Chaque champ nécessite un index mono-champ dédié ; les index composites ne sont pas pris en charge pour ces types.

Type de champ Description Limite
INT Entier 64 bits 4 champs maximum
TIMESTAMP Horodatage entier en millisecondes (≥ 0). La précision de stockage est la milliseconde, mais la précision de la requête est la seconde : les trois derniers chiffres sont traités comme 000 lors des requêtes. 4 champs maximum
GEO_POINT Chaîne au format lon lat, où les deux valeurs sont des nombres à virgule flottante séparés par un espace. Plage de longitude : [−180, 180]. Plage de latitude : [−90, 90]. 2 champs maximum

Création d'index

Dans le schéma d'index, créez un index mono-champ pour chaque champ concerné par une requête d'intervalle et attribuez-lui l'analyseur adéquat.

Type de champ Analyseur Comportement de l'index
INT Analyse numérique Aucune tokenisation ; construit un index numérique pour les requêtes d'intervalle
TIMESTAMP Analyse numérique Aucune tokenisation ; construit un index numérique pour les requêtes d'intervalle
GEO_POINT Emplacement géographique Aucune tokenisation ; construit un index numérique pour les requêtes d'intervalle

Syntaxe des requêtes

INT et TIMESTAMP

Ces deux types de champs utilisent la même notation entre crochets. Les crochets droits [ ] indiquent une inclusion, tandis que les parenthèses ( ) indiquent une exclusion. Omettez une borne pour laisser cet intervalle ouvert.

index:[number1,number2]   // number1 <= index <= number2
index:[number1,number2)   // number1 <= index < number2
index:(number1,number2]   // number1 < index <= number2
index:(number1,number2)   // number1 < index < number2
index:[number1,)          // index >= number1
index:(number1,)          // index > number1
index:(,number2]          // index <= number2
index:(,number2)          // index < number2
Ne placez pas de guillemets immédiatement après les deux-points suivant le nom de l'index.

Exemple de plage de prix — recherchez « dress » dont le prix est compris entre 100 et 200 :

query=index_text:'dress' AND index_price:[100,200]

Exemple de plage d'horodatage — recherchez des actualités concernant « Beijing » du 1er au 3 juin 2019 :

query=index_text:'Beijing' AND index_timestamp:[1559318400000,1559577599000]
Important

Pour les index à analyse numérique, la borne supérieure doit être supérieure ou égale à la borne inférieure. Une plage inversée renvoie l'erreur de syntaxe 6112 (Query clause error).

Précision de TIMESTAMP : la précision de la requête est limitée à la seconde. Les trois derniers chiffres de toute valeur d'horodatage sont définis sur 000 lors d'une requête. La plage valide est [0, 4102416000000], ce qui correspond à la période allant du 01/01/1970 00:00 au 01/01/2100 00:00. Les valeurs dépassant la limite supérieure sont ramenées à 4102416000000. Pour différencier les valeurs au-delà de cette limite, utilisez un filtre.

GEO_POINT

Trois formes de requêtes spatiales sont prises en charge : point, cercle et rectangle.

Requête par point — trouve les documents situés à une coordonnée exacte :

query=spatial_index:'point(LON LAT)'

Exemple : trouvez des documents à la coordonnée (116.3906, 39.92324) :

query=spatial_index:'point(116.3906 39.92324)'

Requête par cercle — trouve les documents situés dans un rayon donné autour d'un point central :

query=spatial_index:'circle(LON LAT,Radius)'

Le paramètre Radius est exprimé en mètres. Les performances de la requête sont optimales pour des rayons jusqu'à 10 km et se dégradent considérablement au-delà.

Exemple : trouvez des documents dans un rayon de 1 000 mètres autour de (116.5806, 39.99624) :

query=spatial_index:'circle(116.5806 39.99624, 1000)'

Requête par rectangle — trouve les documents situés dans un rectangle englobant :

query=spatial_index:'rectangle(minX minY,maxX maxY)'
  • Latitude : maxY doit être ≥ minY. En cas d'inversion, le système corrige automatiquement l'ordre.

  • Longitude : la plage allant de minX à maxX est interprétée d'ouest en est. En cas d'inversion, la requête renvoie une plage incorrecte.

Exemple : trouvez des documents dans le rectangle défini par (116.3906, 39.92324) et (116.3907, 39.92325) :

query=spatial_index:'rectangle(116.3906 39.92324, 116.3907 39.92325)'
Les valeurs valides pour GEO_POINT sont [−180, 180] pour la longitude et [−90, 90] pour la latitude.