Vous pouvez effectuer des opérations d'agrégation pour obtenir les valeurs minimale, maximale, la somme et la moyenne, ainsi que le nombre de lignes et le nombre de valeurs distinctes. Vous pouvez également regrouper les résultats par valeur de champ, par plage, par emplacement géographique ou par filtre, et exécuter des requêtes imbriquées. Il est possible de combiner plusieurs opérations d'agrégation pour réaliser des requêtes complexes.
Procédure
Le schéma suivant illustre la procédure complète d'agrégation.

Le serveur interroge les données correspondant aux conditions de requête, puis effectue l'agrégation selon la demande. Par conséquent, une requête nécessitant une agrégation est plus complexe à traiter qu'une requête sans agrégation.
Informations générales
Le tableau ci-dessous décrit les méthodes d'agrégation disponibles.
|
Méthode |
Description |
|
Valeur minimale |
Méthode d'agrégation permettant de renvoyer la valeur minimale d'un champ. Elle fonctionne de manière similaire à la fonction SQL MIN. |
|
Valeur maximale |
Méthode d'agrégation permettant de renvoyer la valeur maximale d'un champ. Elle fonctionne de manière similaire à la fonction SQL MAX. |
|
Somme |
Méthode d'agrégation permettant de renvoyer la somme de toutes les valeurs d'un champ numérique. Elle fonctionne de manière similaire à la fonction SQL SUM. |
|
Valeur moyenne |
Méthode d'agrégation permettant de renvoyer la moyenne de toutes les valeurs d'un champ numérique. Elle fonctionne de manière similaire à la fonction SQL AVG. |
|
Comptage |
Méthode d'agrégation permettant de renvoyer le nombre total de valeurs pour un champ spécifié ou le nombre total de lignes dans un index de recherche. Elle fonctionne de manière similaire à la fonction SQL COUNT. |
|
Nombre distinct |
Méthode d'agrégation permettant de renvoyer le nombre de valeurs distinctes pour un champ. Elle fonctionne de manière similaire à la fonction SQL COUNT(DISTINCT). |
|
Statistiques de percentile |
Une valeur de percentile indique la position relative d'une valeur au sein d'un ensemble de données. Par exemple, lors de la collecte de statistiques sur le temps de réponse des requêtes pendant les opérations de maintenance courantes de votre système, vous devez analyser la distribution des temps de réponse à l'aide de percentiles tels que p25, p50, p90 et p99. |
|
TopRows |
Méthode d'agrégation permettant d'obtenir les statistiques des lignes principales triées selon des champs spécifiques pour chaque groupe. |
|
Regroupement par valeur de champ |
Méthode d'agrégation permettant de regrouper les résultats de requête en fonction des valeurs de champ. Les valeurs identiques sont regroupées ensemble. La valeur identique de chaque groupe et le nombre de valeurs identiques dans chaque groupe sont renvoyés. Remarque
Le nombre calculé peut différer du nombre réel si le nombre de valeurs dans un groupe est très élevé. |
|
Regroupement par plage |
Méthode d'agrégation permettant de regrouper les résultats de requête en fonction des plages de valeurs d'un champ. Les valeurs de champ situées dans une plage spécifique sont regroupées. Le nombre de valeurs dans chaque plage est renvoyé. |
|
Regroupement par emplacement géographique |
Méthode d'agrégation permettant de regrouper les résultats de requête en fonction des distances par rapport à un point central. Les résultats situés dans une plage de distance spécifique sont regroupés. Le nombre de valeurs dans chaque plage est renvoyé. |
|
Regroupement par filtre |
Méthode d'agrégation permettant de filtrer les résultats de requête et de les regrouper afin d'obtenir le nombre de résultats correspondant à chaque filtre. Les résultats sont renvoyés dans l'ordre de spécification des filtres. |
|
Requête par histogramme |
Méthode d'agrégation permettant de regrouper les résultats de requête en fonction d'intervalles de données spécifiques. Les valeurs de champ situées dans la même plage sont regroupées. La plage de valeurs de chaque groupe et le nombre de valeurs dans chaque groupe sont renvoyés. |
|
Imbrication |
Prérequis
Une instance OTSClient est initialisée. Pour plus d'informations, consultez Initialiser une instance OTSClient.
Une table de données est créée et des données y sont écrites. Pour plus d'informations, consultez Créer une table de données et Écrire des données.
Un index de recherche est créé pour la table de données. Pour plus d'informations, consultez Créer un index de recherche.
Valeur minimale
Méthode d'agrégation permettant de renvoyer la valeur minimale d'un champ. Elle fonctionne de manière similaire à la fonction SQL MIN.
-
Paramètres
Paramètre
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en utilisant ce nom.
field_name
Nom du champ utilisé pour effectuer l'opération d'agrégation. Seuls les types LONG, DOUBLE et DATE sont pris en charge.
missing
Valeur par défaut du champ utilisé pour l'opération d'agrégation sur une ligne lorsque la valeur du champ est vide.
-
Si aucune valeur n'est spécifiée pour missing, la ligne est ignorée.
-
Si une valeur est spécifiée pour missing, cette valeur est utilisée comme valeur de champ pour la ligne.
-
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_min', 'type' => AggregationTypeConst::AGG_MIN, 'body' => array( 'field_name' => 'long', 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
Valeur maximale
Méthode d'agrégation permettant de renvoyer la valeur maximale d'un champ. Elle fonctionne de manière similaire à la fonction SQL MAX.
-
Paramètres
Paramètre
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en utilisant ce nom.
field_name
Nom du champ utilisé pour effectuer l'opération d'agrégation. Seuls les types LONG, DOUBLE et DATE sont pris en charge.
missing
Valeur par défaut du champ utilisé pour l'opération d'agrégation sur une ligne lorsque la valeur du champ est vide.
-
Si aucune valeur n'est spécifiée pour missing, la ligne est ignorée.
-
Si une valeur est spécifiée pour missing, cette valeur est utilisée comme valeur de champ pour la ligne.
-
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_max', 'type' => AggregationTypeConst::AGG_MAX, 'body' => array( 'field_name' => 'long', 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
Somme
Méthode d'agrégation permettant de renvoyer la somme de toutes les valeurs d'un champ numérique. Elle fonctionne de manière similaire à la fonction SQL SUM.
-
Paramètres
Paramètre
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en utilisant ce nom.
field_name
Nom du champ utilisé pour effectuer l'opération d'agrégation. Seuls les types LONG et DOUBLE sont pris en charge.
missing
Valeur par défaut du champ utilisé pour l'opération d'agrégation sur une ligne lorsque la valeur du champ est vide.
-
Si aucune valeur n'est spécifiée pour missing, la ligne est ignorée.
-
Si une valeur est spécifiée pour missing, cette valeur est utilisée comme valeur de champ pour la ligne.
-
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_sum', 'type' => AggregationTypeConst::AGG_SUM, 'body' => array( 'field_name' => 'long', 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
Valeur moyenne
Méthode d'agrégation permettant de renvoyer la moyenne de toutes les valeurs d'un champ numérique. Elle fonctionne de manière similaire à la fonction SQL AVG.
-
Paramètres
Paramètre
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en utilisant ce nom.
field_name
Nom du champ utilisé pour effectuer l'opération d'agrégation. Seuls les types LONG, DOUBLE et DATE sont pris en charge.
missing
Valeur par défaut du champ utilisé pour l'opération d'agrégation sur une ligne lorsque la valeur du champ est vide.
-
Si aucune valeur n'est spécifiée pour missing, la ligne est ignorée.
-
Si une valeur est spécifiée pour missing, cette valeur est utilisée comme valeur de champ pour la ligne.
-
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_avg', 'type' => AggregationTypeConst::AGG_AVG, 'body' => array( 'field_name' => 'long', 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
Comptage
Méthode d'agrégation permettant de renvoyer le nombre total de valeurs pour un champ spécifié ou le nombre total de lignes dans un index de recherche. Elle fonctionne de manière similaire à la fonction SQL COUNT.
Vous pouvez utiliser les méthodes suivantes pour interroger le nombre total de lignes dans un index de recherche ou le nombre total de lignes répondant aux conditions de requête :
Utilisez la fonctionnalité de comptage de l'agrégation et spécifiez count(*) dans la requête.
Utilisez la fonctionnalité de requête pour obtenir le nombre de lignes répondant aux conditions de requête. Définissez setGetTotalCount sur true dans la requête. Utilisez MatchAllQuery pour obtenir le nombre total de lignes dans un index de recherche.
Vous pouvez utiliser le nom d'une colonne comme valeur de l'expression count pour interroger le nombre de lignes contenant cette colonne dans un index de recherche. Cette méthode est adaptée aux scénarios impliquant des colonnes clairsemées.
-
Paramètres
Paramètre
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en utilisant ce nom.
field_name
Nom du champ utilisé pour effectuer l'opération d'agrégation. Seuls les types LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT et DATE sont pris en charge.
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_count', 'type' => AggregationTypeConst::AGG_COUNT, 'body' => array( 'field_name' => 'long', 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
Nombre distinct
Méthode d'agrégation permettant de renvoyer le nombre de valeurs distinctes pour un champ. Cette méthode fonctionne de manière similaire à la fonction SQL COUNT(DISTINCT).
Le nombre de valeurs distinctes est une approximation.
Si le nombre total de lignes avant l'utilisation de la fonction de décompte distinct est inférieur à 10 000, le résultat calculé est proche de la valeur exacte.
Si le nombre total de lignes avant l'utilisation de la fonction de décompte distinct est supérieur ou égal à 100 millions, le taux d'erreur est d'environ 2 %.
-
Paramètres
Parameter
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en vous basant sur ce nom.
field_name
Nom du champ utilisé pour effectuer l'opération d'agrégation. Seuls les types LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT et DATE sont pris en charge.
missing
Valeur par défaut du champ utilisé pour effectuer l'opération d'agrégation sur une ligne lorsque la valeur du champ est vide.
-
Si vous ne spécifiez pas de valeur pour missing, la ligne est ignorée.
-
Si vous spécifiez une valeur pour missing, la valeur de ce paramètre est utilisée comme valeur de champ pour la ligne.
-
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_distinct_count', 'type' => AggregationTypeConst::AGG_DISTINCT_COUNT, 'body' => array( 'field_name' => 'boolean', 'missing' => false ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
Statistiques de percentile
Une valeur de percentile indique la position relative d'une valeur dans un ensemble de données. Par exemple, lors de la collecte de statistiques sur le temps de réponse de chaque requête pendant les opérations de maintenance courantes de votre système, vous devez analyser la distribution des temps de réponse à l'aide de percentiles tels que p25, p50, p90 et p99.
-
Paramètres
Parameter
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en vous basant sur ce nom.
field_name
Nom du champ utilisé pour effectuer l'opération d'agrégation. Seuls les types LONG, DOUBLE et DATE sont pris en charge.
percentiles
Percentiles, tels que p50, p90 et p99. Vous pouvez spécifier un ou plusieurs percentiles.
missing
Valeur par défaut du champ utilisé pour effectuer l'opération d'agrégation sur une ligne lorsque la valeur du champ est vide.
-
Si vous ne spécifiez pas de valeur pour missing, la ligne est ignorée.
-
Si vous spécifiez une valeur pour missing, la valeur de ce paramètre est utilisée comme valeur de champ pour la ligne.
-
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'agg_percentiles', 'type' => AggregationTypeConst::AGG_PERCENTILES, 'body' => array( 'field_name' => 'long', 'percentiles' => array(60, 80, 100), 'missing' => 0 ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
TopRows
Méthode d'agrégation permettant d'obtenir les statistiques des lignes principales triées selon des champs spécifiques pour chaque groupe.
Après avoir groupé les résultats de la requête à l'aide de GroupBy, vous pouvez interroger les lignes de chaque groupe. Cette méthode fonctionne de manière similaire à ANY_VALUE(field) dans MySQL.
-
Paramètres
Parameter
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en vous basant sur ce nom.
limit
Nombre de lignes principales que vous souhaitez renvoyer pour chaque groupe.
sort
Règles de tri pour les lignes de chaque groupe. Le nombre spécifié de lignes principales, triées selon les règles de tri, est renvoyé pour chaque groupe.
columns_to_get
Champs que vous souhaitez renvoyer. Seuls les champs des index de recherche sont pris en charge. Les champs ARRAY, DATE, GEOPOINT et NESTED ne sont pas pris en charge.
La valeur de ce paramètre est identique à celle de columns_to_get dans la requête. Il vous suffit de spécifier columns_to_get dans la requête.
RemarqueLorsque vous interrogez les lignes obtenues à partir des résultats d'une opération d'agrégation dans chaque groupe, les résultats renvoyés ne contiennent que les informations de clé primaire si l'index de recherche contient un champ Nested, Geopoint ou Array. Pour obtenir le champ requis, vous devez interroger la table de données.
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'aggs' => array( 'aggs' => array( array( 'name' => 'avg_top_rows', 'type' => AggregationTypeConst::AGG_TOP_ROWS, 'body' => array( 'limit' => 2, 'sort' => array( 'sorters' => array( array( 'field_sort' => array( 'field_name' => 'long', 'order' => SortOrderConst::SORT_ORDER_DESC ) ) ) ) ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $agg_results = $response["aggs"]["agg_results"]; print json_encode($agg_results, JSON_PRETTY_PRINT);
Groupement par valeur de champ
Méthode d'agrégation permettant de regrouper les résultats de la requête en fonction des valeurs de champ. Les valeurs identiques sont regroupées ensemble. La valeur identique de chaque groupe et le nombre de valeurs identiques dans chaque groupe sont renvoyés.
Le nombre calculé peut différer du nombre réel si le nombre de valeurs dans un groupe est très élevé.
-
Paramètres
Parameter
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en vous basant sur ce nom.
field_name
Nom du champ utilisé pour effectuer l'opération d'agrégation. Seuls les types LONG, DOUBLE, BOOLEAN, KEYWORD et DATE sont pris en charge.
sort
Règles de tri pour les groupes. Par défaut, les groupes sont triés en fonction du nombre d'éléments dans les groupes, par ordre décroissant. Si vous configurez plusieurs règles de tri, les groupes sont triés selon l'ordre dans lequel les règles sont configurées. Paramètres pris en charge :
-
Tri par valeur dans l'ordre alphabétique.
-
Tri par valeur dans l'ordre alphabétique inverse.
-
Tri par nombre de lignes dans l'ordre croissant.
-
Tri par nombre de lignes dans l'ordre décroissant.
-
Tri par les valeurs obtenues à partir des résultats de sous-agrégation dans l'ordre croissant.
-
Tri par les valeurs obtenues à partir des résultats de sous-agrégation dans l'ordre décroissant.
size
Nombre de groupes que vous souhaitez renvoyer. Valeur par défaut : 10. Valeur maximale : 2 000. Si le nombre de groupes dépasse 2 000, seuls les 2 000 premiers groupes sont renvoyés.
sub_aggs et sub_group_bys
Opération de sous-agrégation. Vous pouvez effectuer l'opération de sous-agrégation en vous basant sur les résultats du groupement.
-
Scénario
Interrogez le nombre de produits dans chaque catégorie, ainsi que les prix maximum et minimum des produits dans chaque catégorie.
-
Méthode
Regroupez les résultats de la requête par catégorie de produit pour obtenir le nombre de produits dans chaque catégorie. Ensuite, effectuez deux opérations de sous-agrégation pour obtenir les prix maximum et minimum des produits dans chaque catégorie.
-
Résultat d'exemple
-
Fruits : 5. Le prix maximum est de 2 USD. Le prix minimum est de 0,5 USD.
-
Articles de toilette : 10. Le prix maximum est de 13 USD. Le prix minimum est de 0,1 USD.
-
Appareils électroniques : 3. Le prix maximum est de 1 160 USD. Le prix minimum est de 310 USD.
-
Autres produits : 15. Le prix maximum est de 130 USD. Le prix minimum est de 11 USD.
-
-
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'group_bys' => array( 'group_bys' => array( array( 'name' => 'group_by_GROUP_BY_FIELD', 'type' => GroupByTypeConst::GROUP_BY_FIELD, 'body' => array( 'field_name' => 'boolean', 'size' => 3, 'min_doc_count' => 0, 'sort' => array( 'sorters' => array( array( 'group_key_sort' => array( 'order' => SortOrderConst::SORT_ORDER_DESC ), ), ) ), ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $group_by_results = $response["group_bys"]["group_by_results"]; print json_encode($group_by_results, JSON_PRETTY_PRINT);
Groupement par plage
Méthode d'agrégation permettant de regrouper les résultats de la requête en fonction des plages de valeurs d'un champ. Les valeurs de champ situées dans une plage spécifique sont regroupées ensemble. Le nombre de valeurs dans chaque plage est renvoyé.
-
Paramètres
Parameter
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en vous basant sur ce nom.
field_name
Nom du champ utilisé pour effectuer l'opération d'agrégation. Seuls les types LONG et DOUBLE sont pris en charge.
ranges[from, to)
Plages de valeurs utilisées pour le groupement.
La plage de valeurs peut commencer à Double.MIN_VALUE et se terminer à Double.MAX_VALUE.
sub_aggs et sub_group_bys
Opération de sous-agrégation. Vous pouvez effectuer l'opération de sous-agrégation en vous basant sur les résultats du groupement.
Par exemple, après avoir groupé les résultats de la requête par volume de ventes et par province, vous pouvez obtenir la province qui a la plus grande proportion de volume de ventes dans une plage spécifiée. Vous devez spécifier une valeur pour GroupByField dans GroupByRange pour effectuer cette requête.
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'group_bys' => array( 'group_bys' => array( array( 'name' => 'group_by_GROUP_BY_RANGE', 'type' => GroupByTypeConst::GROUP_BY_RANGE, 'body' => array( 'field_name' => 'long', 'ranges' => array( array( 'from' => 1, 'to' => 3 ), array( 'from' => 3, 'to' => 6 ), array( 'from' => 6, 'to' => 10 ) ) ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $group_by_results = $response["group_bys"]["group_by_results"]; print json_encode($group_by_results, JSON_PRETTY_PRINT);
Groupement par emplacement géographique
Méthode d'agrégation permettant de regrouper les résultats de la requête en fonction des distances entre les emplacements géographiques et un point central. Les résultats de la requête dont les distances se situent dans une plage spécifique sont regroupés ensemble. Le nombre de valeurs dans chaque plage est renvoyé.
-
Paramètres
Parameter
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en vous basant sur ce nom.
field_name
Nom du champ utilisé pour l'opération d'agrégation. Seul le type GEOPOINT est pris en charge.
origin(lat, lon)
Longitude et latitude du point central.
lat spécifie la latitude du point central. lon spécifie la longitude du point central.
ranges[from, to)
Plages de distance utilisées pour le groupement. Unité : mètres. Les valeurs de from et to sont de type DOUBLE.
La plage de valeurs peut commencer à Double.MIN_VALUE et se terminer à Double.MAX_VALUE.
sub_aggs et sub_group_bys
Opération de sous-agrégation. Vous pouvez effectuer l'opération de sous-agrégation en vous basant sur les résultats du groupement.
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'group_bys' => array( 'group_bys' => array( array( 'name' => 'group_by_GROUP_BY_GEO_DISTANCE', 'type' => GroupByTypeConst::GROUP_BY_GEO_DISTANCE, 'body' => array( 'field_name' => 'geo', 'origin' => array( 'lat' => 5, 'lon' => 6 ), 'ranges' => array( array( 'from' => 0., 'to' => 1000. ), array( 'from' => 10000., 'to' => 100000. ), array( 'from' => 100000., ), ) ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $group_by_results = $response["group_bys"]["group_by_results"]; print json_encode($group_by_results, JSON_PRETTY_PRINT);
Groupement par filtre
Méthode d'agrégation permettant de filtrer les résultats de la requête et de les regrouper afin d'obtenir le nombre de résultats correspondant à chaque filtre. Les résultats sont renvoyés dans l'ordre dans lequel les filtres sont spécifiés.
-
Paramètres
Parameter
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en vous basant sur ce nom.
filters
Filtres pouvant être utilisés pour la requête. Les résultats sont renvoyés dans l'ordre dans lequel les filtres sont spécifiés.
sub_aggs et sub_group_bys
Opération de sous-agrégation. Vous pouvez effectuer l'opération de sous-agrégation en vous basant sur les résultats du groupement.
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'group_bys' => array( 'group_bys' => array( array( 'name' => 'group_by_GROUP_BY_FILTER', 'type' => GroupByTypeConst::GROUP_BY_FILTER, 'body' => array( 'filters' => array( array( 'query_type' => QueryTypeConst::TERM_QUERY, 'query' => array( 'field_name' => 'boolean', 'term' => false ) ), array( 'query_type' => QueryTypeConst::TERM_QUERY, 'query' => array( 'field_name' => 'boolean', 'term' => true ) ) ) ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $group_by_results = $response["group_bys"]["group_by_results"]; print json_encode($group_by_results, JSON_PRETTY_PRINT);
Requête par histogramme
Méthode d'agrégation permettant de regrouper les résultats de la requête en fonction d'intervalles de données spécifiques. Les valeurs de champ situées dans la même plage sont regroupées ensemble. La plage de valeurs de chaque groupe et le nombre de valeurs dans chaque groupe sont renvoyés.
-
Paramètres
Parameter
Description
name
Nom unique de l'opération d'agrégation. Vous pouvez interroger les résultats d'une opération d'agrégation spécifique en vous basant sur ce nom.
field_name
Nom du champ utilisé pour effectuer l'opération d'agrégation. Seuls les types LONG et DOUBLE sont pris en charge.
interval
Intervalle de données utilisé pour obtenir les résultats d'agrégation.
field_range[min,max]
Plage utilisée conjointement avec le paramètre interval pour limiter le nombre de groupes.
La valeur calculée à l'aide de la formule ne peut pas dépasser 2 000.min_doc_count
Nombre minimal de lignes. Si le nombre de lignes dans un groupe est inférieur au nombre minimal de lignes, les résultats d'agrégation pour le groupe ne sont pas renvoyés.
missing
Valeur par défaut du champ utilisé pour effectuer l'opération d'agrégation sur une ligne lorsque la valeur du champ est vide.
-
Si vous ne spécifiez pas de valeur pour missing, la ligne est ignorée.
-
Si vous spécifiez une valeur pour missing, la valeur de ce paramètre est utilisée comme valeur de champ pour la ligne.
-
-
Exemple
$request = array( 'table_name' => 'myTableName', 'index_name' => 'myIndexName', 'search_query' => array( 'offset' => 0, 'limit' => 0, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::MATCH_ALL_QUERY ), 'group_bys' => array( 'group_bys' => array( array( 'name' => 'group_by_GROUP_BY_HISTOGRAM', 'type' => GroupByTypeConst::GROUP_BY_HISTOGRAM, 'body' => array( 'field_name' => 'long', 'interval' => 3, 'missing' => 0, 'min_doc_count' => 0, 'field_range' => array( 'min' => 2, 'max' => 10, ), 'sort' => array( 'sorters' => array( array( 'row_count_sort' => array( 'order' => SortOrderConst::SORT_ORDER_ASC ) ) ) ) ) ), ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX, ), ); $response = $this->otsClient->search($request); $group_by_results = $response["group_bys"]["group_by_results"]; print json_encode($group_by_results, JSON_PRETTY_PRINT);
Imbrication
Vous pouvez utiliser l'imbrication pour effectuer des opérations de sous-agrégation dans un groupe. Par exemple, vous pouvez effectuer des opérations d'agrégation imbriquées jusqu'à deux niveaux.
GroupBy + SubGroupBy : Les éléments sont groupés par province et par ville pour obtenir les données de chaque ville dans chaque province.
GroupBy + SubAggregation : Les éléments sont groupés par province et la valeur maximale d'une métrique est calculée pour obtenir la valeur maximale d'une métrique pour chaque province.
Pour équilibrer les performances et la complexité, seul un nombre spécifique de couches d'imbrication est autorisé. Pour plus d'informations, consultez Limites de l'index de recherche.
$request = array(
'table_name' => 'myTableName',
'index_name' => 'myIndexName',
'search_query' => array(
'offset' => 0,
'limit' => 0,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::MATCH_ALL_QUERY
),
'group_bys' => array(
'group_bys' => array(
array(
'name' => 'group_by_GROUP_BY_FIELD',
'type' => GroupByTypeConst::GROUP_BY_FIELD,
'body' => array(
'field_name' => 'boolean',
'size' => 3,
'min_doc_count' => 0,
'sort' => array(
'sorters' => array(
array(
'group_key_sort' => array(
'order' => SortOrderConst::SORT_ORDER_DESC
),
),
)
),
'sub_aggs' => array(
'aggs' => array(
array(
'name' => 'groupSum',
'type' => AggregationTypeConst::AGG_SUM,
'body' => array(
'field_name' => 'long',
'missing' => 0
)
),
),
),
)
),
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
),
);
$response = $this->otsClient->search($request);
$group_by_results = $response["group_bys"]["group_by_results"];
print json_encode($group_by_results, JSON_PRETTY_PRINT);